Bitcoin Forum

Economy => Services => Topic started by: Peter R on May 26, 2015, 09:31:27 PM



Title: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: Peter R on May 26, 2015, 09:31:27 PM
I'm accepting bids to create a webpage that allows users to digitally sign or verify files with a bitcoin private key, as shown below.  Everything should occur client side.  Most of the code required is already open source and used at http://www.proofofexistence.com/ and https://brainwallet.org/#sign.  If you are interested in doing this work (just the coding--no hosting/management required), then place your fixed-price bid in this thread.  Dealing gracefully with invalid inputs is expected.  

1.  I want one tab on the page that allows a user to select a file, paste a private key, and then produce the digital signature (all done client side):

https://i.imgur.com/gfdgXSY.png

2. And I want another tab on the same page to allow a user to verify a signature:

https://i.imgur.com/kwmGXMj.png

If you place a bid and I accept, then I expect to see meaningful progress within 1 week.  

I reserve the right to not select any bid, if none are satisfactory to me.  I am willing to escrow the funds with a forum member who I trust.  

*EDIT: format for the signatures has been clarified in this post (https://bitcointalk.org/index.php?topic=1071237.msg11460005#msg11460005) two below.  


Title: Re: [WANTED] JavaScript programmer for small project -- place your bids!!
Post by: thezerg on May 27, 2015, 01:32:48 AM
The first site (http://www.proofofexistence.com/) does a digital "fingerprint" (SHA256) of the document and then puts that on the blockchain -- so it does not do a digital signature.

If you look at the second site closely (https://brainwallet.org/#sign), you'll see that it is capable of "signing" the document using a variety of different flavors.  This is because the actual digital signature algorithm can be different.  Do you want a particular algorithm (which might be trickier because the engineer would need to research it, and do interoperability testing) or do you just need your own digital signature algorithm (only works in your web site in the 2 tabs you described).



Title: Re: [WANTED] JavaScript programmer for small project -- place your bids!!
Post by: Peter R on May 27, 2015, 02:40:24 AM
The first site (http://www.proofofexistence.com/) does a digital "fingerprint" (SHA256) of the document and then puts that on the blockchain -- so it does not do a digital signature.

Yes, I want to hash the document and then just sign it (i.e., no writing to the blockchain).  My note in the image just meant that the code to drag and drop the file, and then hash it, was available from proofofexistence.com.  Sorry for the confusion. 

Quote
If you look at the second site closely (https://brainwallet.org/#sign), you'll see that it is capable of "signing" the document using a variety of different flavors.  This is because the actual digital signature algorithm can be different.  Do you want a particular algorithm (which might be trickier because the engineer would need to research it, and do interoperability testing) or do you just need your own digital signature algorithm (only works in your web site in the 2 tabs you described).

Thanks for the clarification.  I was originally going to accept what I got as long as it was consistent between the two tabs, but since you asked :) ...

...ideally, I think it would be most useful to extend the "bitcoin signed message" format to arbitrary files.  The idea being that if you uploaded a plain text file, the signature the page returned would be the same as if you generated a standard bitcoin signed message using the file's contents as a string.  

My understanding, then, is that we'd append the bytes:

Code:
"\x18Bitcoin Signed Message:\n"

to the file, and hash the result with SHA256 to get a 32-byte digest.  We'd hash this digest again using SHA256, and then sign that digest with the specified private key.  

As for the encoding of the signature, I'd like it expressed in B64 in the format used by pybtctool, blockchain.info and I believe multibit and bitcoin-qt.  This means that whether the pubkey is compressed or uncompressed must be indicated by the first byte of the signature, as I learned here (https://bitcointalk.org/index.php?topic=610453.msg7763897#msg7763897).

I think the code at brainwallet.org already takes these details into account so I think it's just a matter of copying the correct code.  


Title: Re: [WANTED] JavaScript programmer for small project -- place your bids!!
Post by: Peter R on May 27, 2015, 01:12:42 PM
Bump.


Title: Re: [WANTED] JavaScript programmer for small project -- place your bids!!
Post by: thezerg on May 28, 2015, 12:59:31 PM
so you basically want the exact brainwallet.org code to simply be isolated out of brainwallet so you can use it?



Title: Re: [WANTED] JavaScript programmer for small project -- place your bids!!
Post by: Peter R on May 28, 2015, 04:48:20 PM
so you basically want the exact brainwallet.org code to simply be isolated out of brainwallet so you can use it?

Yes, I want that, and more as well.  Brainwallet only allows you to sign a text string.  I want to be able to sign an arbitrary file.  And I want the "finished product" to be a webpage that looks similar to the images in the OP and that can be run entirely client side (i.e., I should be able to open your webpage from a USB stick offline and it should work).  
  
  - isolate sign/verify code from brainwallet
  - modify to allow signing/verifying of arbitrary files
  - create a webpage that looks like the screen shots I posted in the OP
  - it is important that the drag&drop functionality from proofofexistence be used for file selection


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: thezerg on June 01, 2015, 11:41:15 PM
Ok I'll bid 5 BTC

EDIT: I'll match 3.9 although I'm guessing that's a bit under my hourly


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: BinaryMage on June 02, 2015, 12:33:15 AM
This seems fairly well-specified already, but just to confirm:

- 2 simple HTML pages as portrayed in the OP, allowing drag-and-drop file selection (along with traditional menu-based selection), text input of private key or received signature (with an option to generate a new private key), and finally display of the signature or signee address (if valid) respectively.
- JS code performing the following functionality:
  1. Accept an arbitrary file.
  2. Append the characters "\x18Bitcoin Signed Message:\n".
  3. Twice SHA256-hash the resulting data and then sign the digest with the provided/generated private key.
  4. Display the signature encoded in Base64.
  5. Verify signatures created in this format, using this page, calculating the signee address for a valid signature.

Note that there will probably be practical filesize limits due to speed.

For that I bid 4 BTC, escrowed through anyone reasonable.


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: Ditto on June 02, 2015, 02:11:31 AM
Bidding 3.9 BTC here


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: luigi1111 on June 02, 2015, 03:18:48 PM
So, it's not very pretty, or even exactly what you wanted, but whatever.

Specifically:
Quote
The idea being that if you uploaded a plain text file, the signature the page returned would be the same as if you generated a standard bitcoin signed message using the file's contents as a string.

isn't there, rather it's more like a triple SHA256 hash as it's using the code from http://proofofexistence.com/ for the file hashing.

Here it is anyway: http://btc.llcoins.net/temp/sign-file.html

Can provide a zip if anyone actually wants it.

Edit: forgot about the random Private Key option. Added it on load.
Edit2: changed bootstrap version.
Edit3: improved verification error handling (I think)
Edit4: streamlined verification & added pubkey
Edit5: added newkey option and streamlined signing a bit


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: Peter R on June 06, 2015, 12:37:39 AM
Sorry for the delay in responding to the most recent bids.  I've was travelling and then attending a conference, and have had little time to respond to messages the past few days [and it seems the "watch/notify" feature here only works intermittently].    

I received bids as low as 0.35 BTC to as high as 5 BTC.  The project has been awarded to u/lhuddy from Reddit (r/jobs4bitcoins) for $250 US.  Thank you to everyone for your interest!!  


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: luigi1111 on June 06, 2015, 01:01:40 AM
Was a fun experience anyway. Good luck.  :)


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: Peter R on June 06, 2015, 01:25:33 AM
Was a fun experience anyway. Good luck.  :)

Looking more into the webpage you produced, I actually think your signature scheme makes more sense than my own.  It is advantageous because:

1.  The user signs the text version of the file hash after seeing its value, and so the user can easily verify using other tools that their file indeed has the indicated hash.

2.  The user signs the file hash as plain text with a bitcoin-signed message; the user can easily verify using another tool that the bitcoin-signed message is correct.  

I sent you a PM hoping that I can compensate you for this work and idea in some small way.  


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: luigi1111 on June 06, 2015, 03:43:41 AM
Was a fun experience anyway. Good luck.  :)

Looking more into the webpage you produced, I actually think your signature scheme makes more sense than my own.  It is advantageous because:

1.  The user signs the text version of the file hash after seeing its value, and so the user can easily verify using other tools that their file indeed has the indicated hash.

2.  The user signs the file hash as plain text with a bitcoin-signed message; the user can easily verify using another tool that the bitcoin-signed message is correct.  

I sent you a PM hoping that I can compensate you for this work and idea in some small way.  

To anyone who may read this thread: Peter R is a genuine, nice guy. He owed me nothing - I didn't even quote this job - yet he gave me a nice BTC tip for my efforts.

Thanks again, Peter.


Title: Re: [HIRING] JavaScript programmer for small project -- place your bids!!
Post by: Peter R on June 09, 2015, 06:37:24 PM
This project has now been completed by u/lhuddy.  I was happy with his work and posted a testimonial here:

http://www.reddit.com/r/testimonials/comments/39704e/pos_ulhuddyjavascript_bitcoin_project/