Skip to content

Instantly share code, notes, and snippets.

@gabridome
Last active December 10, 2018 10:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gabridome/48f756c52587c0ee53ed32279838eabd to your computer and use it in GitHub Desktop.
Save gabridome/48f756c52587c0ee53ed32279838eabd to your computer and use it in GitHub Desktop.
how to verify opentimestamps.org .ots files reproducing the hash operations on the command line on Mac.
the output of the `ots info` command is in the form:
````
$ ots info ../../Downloads/email.html.ots
File sha256 hash: b5054af8078852d17d1653897a99cfd3cf7a0f0d5d33bcd15961ec619c3cb19e
Timestamp:
append 40ee69f78b4e4c4094d6a6e8869c9c93
sha256
-> append 196ac4428094e68d57db4e99100891ae
sha256
prepend f5004d829df46bb11a83683fd32af6cf6fb855b7e1f36fd67514620f3da51a77
sha256
prepend 5bf81291
append 7b25dc16bdb476e6
verify PendingAttestation('https://bob.btc.calendar.opentimestamps.org')
sha256
prepend 97ceae5c079278657b6627ef6c7bde0c83df26d9d667a334ac18c0a663046790
sha256
append 76741351126afcf9c3676a40ce496d6b41d9553091ea09fa0f17de0bf43551ad
sha256
```
to reproduce the calculations you can use `shasum` and `sed` on mac in th following way:
First of all we append an hex string to the sha of the document (as prescribed):
append 40ee69f78b4e4c4094d6a6e8869c9c93
==> result b5054af8078852d17d1653897a99cfd3cf7a0f0d5d33bcd15961ec619c3cb19e40ee69f78b4e4c4094d6a6e8869c9c93
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
then we perform a sha256 on the binary version of the hex string:
```
echo b5054af8078852d17d1653897a99cfd3cf7a0f0d5d33bcd15961ec619c3cb19e40ee69f78b4e4c4094d6a6e8869c9c93| echo -n -e $(tr -d '[:space:]' | sed 's/../\\x&/g')|shasum -a 256
187f95853dca35866015833118dbf77c8b20acf8076cd092eed5ab5bec926244 -
```
you can see at https://opentimestamps.org/info/?004f70656e54696d657374616d7073000050726f6f6600bf89e2e884e892940108b5054af8078852d17d1653897a99cfd3cf7a0f0d5d33bcd15961ec619c3cb19ef01040ee69f78b4e4c4094d6a6e8869c9c9308fff010196ac4428094e68d57db4e99100891ae08f120f5004d829df46bb11a83683fd32af6cf6fb855b7e1f36fd67514620f3da51a7708f1045bf81291f0087b25dc16bdb476e6ff0083dfe30d2ef90c8e2c2b68747470733a2f2f626f622e6274632e63616c656e6461722e6f70656e74696d657374616d70732e6f726708f12097ceae5c079278657b6627ef6c7bde0c83df26d9d667a334ac18c0a66304679008f02076741351126afcf9c3676a40ce496d6b41d9553091ea09fa0f17de0bf43551ad08f020e334b5a3f28fefc468c7d80b5c37d0322226b87ce73f74ad221278671116544a08f12039f9c0faff6b63ea308e6696e0b63fd4b0474a315e696cc124a83fbcd6ddf91208f020ccf463e0d2a95163389200b60c78126cadfe577849c9776eb079455728e342fc08f120e2ad6de11dad48adc2ff6881759cb04eb3072ce0bcc2b965aca97d1e2a80559208f120ef0d39cfc9ff971e31e770f4fd591f1dfdd9302c550126170bf35026470586ba08f120fd5a8a3b0c2cf6076f8451884daa7b86e7fb8f7d3179ac3e07139ca39552f71708f02000472b0cec100654afbe152c7ecd9efb7dbb1d34b332c0fa2cea737d5eec597b08f020ed3129c1b24bdebfae4bd95e096d855811d73455340054ece6a5f3e89d334a0908f12091d92abdf649d4b59253f48b8437eed23c772cdfb168efa8d16e9875a8d8aff908f17101000000017feaa59d0bfb2fa38d829a7d2df1528ff8621c2ef18e220e72788fdf41f85ba500000000171600142998cfadd1cb3d8d077624dd8e08bfc8802e7df8fdffffff023d4271000000000017a91401ba53641bd365e7fabfc741bfbd43566151d0bb870000000000000000226a20f004226908000808f02023a31cdb0327f1f7252eb7927a3dd3a1e43d016dc521e08912ace46d77a664e50808f020da7361b749ff39c9d51ff7f99bd0f957ca0bd5acd34430fa391e6d2a173940710808f020d31883b635f0220059e0ff469d0e05b86919a7b00c8d40f9d7fbcd2ed7abea0e0808f02026d41b2583523b0278cdfba0e072c4d26c8924211a6fa0c0285e0b39d38f95880808f020ea1d12b759ac5b47872c04884ffb21a927a34b294f97a5a3854500b7200169b10808f120de42bf717f86d0c552295d05ab9d7c822d3085488ef802a8a63903e24b5585db0808f120eb1aaeaf8e7a250579d9011e353e2bf95935dd4946db79aefb4cb1483995939d0808f12062bf9d985568f281ab977032116de324923695fe30afcedfa91b10dde95f907c0808f120ba881003bd9031e9b8fdfc332f9d941701d9c81827279678e679d63f186103c80808f120782894fa9245e29e588af45006457d698489f021d0a59f90a8f8901c7320c3700808f1201615b975f8fec1244f0c30e791ca412c6f0927236abe932051ee0a02facd0a490808f020963f781320ff79dec9c72baba7777f31c0722d8998fb86f0b70399b355c787960808000588960d73d7190103a3d221fff010b4442609e8e39a2dd06b2b697d0e0c2408f0104ad88d241391e186965b95a9fb89db3c08f1045bf81291f008ac3ae3007340d906ff0083dfe30d2ef90c8e292868747470733a2f2f66696e6e65792e63616c656e6461722e657465726e69747977616c6c2e636f6d08f1202bff53e1e61c5f00252dd15c8c19ed16fcb719bb6b9042983c570fee1e7aa0f808f1206e4669f3ce16d64e463e3ed3e6e43825af31337cc86b9e3d0ebb1d794e994b6108f120b7008097c97f2b3d6cf50c55abf6b9b5c3db4bbe252987735c5d12233a612a3a08f12020ff23f2b7ae1132ea3f314d4f8703b42d123c3f989cd36e96c00d9cdcc3604f08f0204965d9f1a1d473b68ea8f0f87091eeb700765684a5836a4bcf7a34546ba046b208f1208086c017db32b24e7f5b7858afd3dd139cf097f0e6ed9e48f46f6f319e37893708f020465a531e97b1c5d66f3c2428c72577325a1ac2976e06028bfffbbfafa3af4db908f120672180b539242a30ead864b4c3e0356698f7f1129533c130f5e5e6291f6a151008f120fa170384e31983e15c8409ca00c41dcc91b4d86376d0e8c394b278cd50c533b208f020b44ae847764c601952197664190a3332f7f0614e3d21cfb8429e4f2745f869d908f1710100000001e7b84eba82caea5b64202e7bb2ba66c19e034336c68d6daa7c5282c82eb6386700000000171600147d9f34a011574eda7a60e73471c938d1cd67d670fdffffff02440d0b000000000017a9146bdffabbf6c1352c8c01e6e884f292ec2c11788d870000000000000000226a20f004226908000808f12094665bf5aa07b30ebb00460dc46b1c8706a1700112ee7e72195243da35a89c360808f120165ae063ed80ef8a3482fba41eecc3fd2132bf75650af87d3149ae826a9def8e0808f1206e40dd7c67b1c4a85a5e29b6f9df8d94b19fe45d10b85987ed7652480596ac5a0808f1209f98d52141d5916994e8e4c4445b61be843902f3373489e2fa606cb0be551b5e0808f1200dd3fd82e357103a8d2a784bb483cc4d9f333ae83684b5cb7bdc4da1347914840808f020c883958d6db29731e85f4bbf6099caf5a89579de67b7a3ba63cf6c4520fd3a930808f120eb1aaeaf8e7a250579d9011e353e2bf95935dd4946db79aefb4cb1483995939d0808f12062bf9d985568f281ab977032116de324923695fe30afcedfa91b10dde95f907c0808f120ba881003bd9031e9b8fdfc332f9d941701d9c81827279678e679d63f186103c80808f120782894fa9245e29e588af45006457d698489f021d0a59f90a8f8901c7320c3700808f1201615b975f8fec1244f0c30e791ca412c6f0927236abe932051ee0a02facd0a490808f020963f781320ff79dec9c72baba7777f31c0722d8998fb86f0b70399b355c787960808000588960d73d7190103a3d221f010f4662119bacdb9ff5710c32833927e8f08f020b53bc3100dc13a7f86b60c1a423556ab0e07f7e9c3914dc0388cc0c524b950bb08f0204c28e7f4ccc34aeb1fdaf38d42ea41dfb8750f253006acaca84ef97045bce6dd08f1045bf81291f008e952a431e16c7e03ff0083dfe30d2ef90c8e2e2d68747470733a2f2f616c6963652e6274632e63616c656e6461722e6f70656e74696d657374616d70732e6f726708f12019a82aac1305ab41922d3e32881a099a0a90acf7f566a242a2d55457ec5d4bd008f12049c95658dff8462b54adc0f60142231db9f27293b5cba41fa89490660399f0fc08f020dee210ef97c09549704ae09987fd8e77aa102235c4ea572b1c20b8783b9c0e7a08f1207b134ae13151d49c3c5d92e3c07b8a9a28d47f6129c4228418281a9f7579692008f1202ae38eab5b6eab4a1102fcfed85297e6bd9a7c32e4b9504b59e40daef1ed406b08f020e76988f33886bac8e6f40f6671b73a0acad0f5afdce61b5f67477f4d6385743008f120bee7ea5d7470e96835846ee870fa81fcaa06dcb0eef1032fbb90ce00d619e18c08f12015bcd36138253bc2c4e260c409b713031e71a41014a226c1d9884d65ff1a2bd508f020d96be675244a01e1cb3560b89f0031de02a5ec030f87d460cd89ede194cc8fa308f0203d5e6dc51c4a1504fd00c7a26ef794104afeadb25ab7a6f5f09bd1c021cc980108f1200ba0e869258ff107661f63ee678d694b6044926244bca906a9f6ff9748da9d9408f171010000000187ba75a151642653ab435d9492f9fb1b09f8c13b9bad7d409cb55d1299a9076a0000000017160014b8fac4a450bc88e024c61405f35c38ab2d68d826fdffffff02042f36000000000017a914539b53c1712752cb069378eb0d2719ab2cd0a2f0870000000000000000226a20f004226908000808f1208df377d083d03410524195fa07cba8952432f896ccb54f10f3c45ebb4edfdfa40808f020c89e41d153b22a5413e44fdcaed45715e2fc5e4006539c53fd73098c27de30a80808f120a09965c8bed7206c4a15f116e9cbeefe5ded5a099a097cd20f82d9b9b9f23f830808f02026d41b2583523b0278cdfba0e072c4d26c8924211a6fa0c0285e0b39d38f95880808f020ea1d12b759ac5b47872c04884ffb21a927a34b294f97a5a3854500b7200169b10808f120de42bf717f86d0c552295d05ab9d7c822d3085488ef802a8a63903e24b5585db0808f120eb1aaeaf8e7a250579d9011e353e2bf95935dd4946db79aefb4cb1483995939d0808f12062bf9d985568f281ab977032116de324923695fe30afcedfa91b10dde95f907c0808f120ba881003bd9031e9b8fdfc332f9d941701d9c81827279678e679d63f186103c80808f120782894fa9245e29e588af45006457d698489f021d0a59f90a8f8901c7320c3700808f1201615b975f8fec1244f0c30e791ca412c6f0927236abe932051ee0a02facd0a490808f020963f781320ff79dec9c72baba7777f31c0722d8998fb86f0b70399b355c787960808000588960d73d7190103a3d221
that the result of the first operation is correct.
In alternative you can use `xxd`:
```
echo "b5054af8078852d17d1653897a99cfd3cf7a0f0d5d33bcd15961ec619c3cb19e40ee69f78b4e4c4094d6a6e8869c9c93" | xxd -r -p - |shasum -a 256
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment