### Install OpenTimestamps Client in Development Mode Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Use setuptools in development mode for installing the OpenTimestamps client. Ensure Python 3 is used. ```bash python3 setup.py develop --user ``` -------------------------------- ### Install OpenTimestamps Client via PyPI Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Use pip to install the OpenTimestamps client package. This is the recommended method for most users. ```bash pip3 install opentimestamps-client ``` -------------------------------- ### Install OpenTimestamps Client from Source Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Install the OpenTimestamps client directly from its source code. This method is useful for development or when the latest changes are needed. ```bash python3 setup.py install ``` -------------------------------- ### Verify Timestamp Example Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/release-notes.md Demonstrates how to verify a timestamp file and displays the Bitcoin block and date it was attested. This output format shows the date rounded to the nearest day for better accuracy representation. ```bash $ ots verify examples/empty.ots Assuming target filename is 'examples/empty' Success! Bitcoin block 129405 attests existence as of 2011-06-08 EDT ``` -------------------------------- ### Install System Dependencies on Debian Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Install necessary system packages for OpenTimestamps client on Debian-based systems. Ensure Python 3 and its development tools are present. ```bash sudo apt-get install python3 python3-dev python3-pip python3-setuptools python3-wheel ``` -------------------------------- ### Get Information About a Timestamp Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Use the 'ots info' command to inspect a timestamp file. It displays the file's hash and the structure of commitment operations and attestations within the timestamp. ```bash ots info examples/two-calendars.txt.ots ``` -------------------------------- ### Initialize and Manage Timestamp Cache Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Demonstrates initializing a local cache, checking for existing commitments, and merging new timestamps into the persistent storage. ```python from otsclient.cache import TimestampCache from opentimestamps.core.timestamp import Timestamp # Initialize cache at custom location cache = TimestampCache('/path/to/cache') # Check if commitment exists in cache commitment = bytes.fromhex('abcd1234...') if commitment in cache: cached_timestamp = cache[commitment] print("Found cached timestamp") # Merge new attestations into cache new_timestamp = Timestamp(commitment) # ... add attestations to new_timestamp ... cache.merge(new_timestamp) # Cache stores timestamps in hierarchical directory structure: # /path/to/cache/ab/cd/12/34/ ``` -------------------------------- ### Common OpenTimestamps Client Options Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Global options for configuring Bitcoin nodes, caching, calendars, and network settings that apply to all OpenTimestamps commands. ```bash # Verbosity control uts -v stamp file.txt # Verbose output uts -vv stamp file.txt # More verbose (debug) uts -q stamp file.txt # Quiet mode uts -qq stamp file.txt # Very quiet (errors only) ``` ```bash # Bitcoin network selection uts --btc-testnet verify file.ots # Use testnet uts --btc-regtest verify file.ots # Use regtest uts --no-bitcoin verify file.ots # Disable Bitcoin verification ``` ```bash # Custom Bitcoin node uts --bitcoin-node http://user:pass@localhost:8332/ verify file.ots ``` ```bash # Calendar whitelist management uts --whitelist https://custom.calendar.org stamp file.txt uts --no-default-whitelist --whitelist https://private.calendar.org stamp file.txt ``` ```bash # Caching options uts --cache /custom/cache/path verify file.ots uts --no-cache verify file.ots ``` ```bash # SOCKS5 proxy (e.g., for Tor) uts --socks5-proxy localhost:9050 stamp file.txt ``` ```bash # Wait for Bitcoin confirmation uts --wait stamp file.txt # Wait during stamping uts --wait verify file.ots # Wait during verification ``` -------------------------------- ### Create Signed and Timestamped Commit Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Initialize a repository and create a signed commit that is automatically timestamped. ```bash $ git init Initialized empty Git repository in /tmp/test/.git/ $ echo "Hello World!" > greeting $ git add greeting $ git commit -S -m 'initial commit' ots: Submitting to remote calendar 'https://pool.opentimestamps.org' [master (root-commit) 6ccf07f] initial commit 1 file changed, 1 insertion(+) create mode 100644 greeting ``` -------------------------------- ### Create a Timestamp Proof Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Use the 'ots stamp' command to create a timestamp proof for a file. The tool will submit the file's hash to remote calendars. ```bash ots stamp README.md ``` -------------------------------- ### Configure Git GPG Wrapper Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Set the GPG program path to the OpenTimestamps wrapper script. ```bash git config --global gpg.program ``` -------------------------------- ### Upgrade Pending Timestamps with ots upgrade Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Fetches completed proof paths for pending timestamps once the underlying Bitcoin transaction is confirmed. ```bash # Upgrade a pending timestamp ots upgrade incomplete.txt.ots # Output: Got 1 attestation(s) from cache # Success! Timestamp complete # Creates: incomplete.txt.ots.bak (backup of original) # Upgrade multiple timestamps ots upgrade file1.ots file2.ots file3.ots # Dry run - check if upgrade is possible without modifying files ots upgrade --dry-run incomplete.txt.ots # Override calendar servers ots upgrade -c https://alice.btc.calendar.opentimestamps.org incomplete.txt.ots # Wait until timestamp is complete (polls every 30 seconds) ots upgrade --wait incomplete.txt.ots ``` -------------------------------- ### Verify Timestamp Proof with Different Files Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/examples/sha1/README.md Use the 'ots verify' command to confirm that a single timestamp proof can validate two different files that share a SHA1 collision. This demonstrates the resilience of timestamping against such cryptographic weaknesses. ```bash $ ots verify -f a a_or_b.ots Success! Bitcoin attests data existed as of Wed May 17 21:45:45 2017 EDT ``` ```bash $ ots verify -f b a_or_b.ots Success! Bitcoin attests data existed as of Wed May 17 21:45:45 2017 EDT ``` -------------------------------- ### Inspect Commit with cat-file Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md View the raw commit object containing both PGP signature and OpenTimestamps data. ```bash $ git cat-file -p HEAD tree 7b83077600c4fc88b2e519d4bc0a0dea6d3d6396 author Peter Todd 1473132873 -0400 committer Peter Todd 1473132873 -0400 gpgsig -----BEGIN PGP SIGNATURE----- iQEbBAABCAAGBQJXzjlLAAoJEGOZARBE6K+yEt8H+JF4cUkfurgKqVEiRFsQXirZ iO6v79SjdRVTXoHIikDoEnLaScr1BpHVxBqNakGJoRaPnOJYZEMNm2ICmnDJbSAQ llNUc3sUWfrnIcbo6wm5PVAUMDKKJFgHFK0dLnmwbDNlOY/1qvikSkGq1n/fHVDm iRQweH+p47StJt/255TsknuSMu+gllGByHcAcLRPFkcwgvHp/P6MZ26yxGmRu3u4 Kmo7iEMlTSwJZTqjmAWH0uxm2wVaKRcxaJx1sUAkuOvCdXxDTVZdxiRupdBdicLQ UsU4ZKoEKte7Hhe10d4c0LmIHGgrPc3jH+DL3zD5r1n6BLHzDuTFbnXTWZnpAg== =/mbV -----END PGP SIGNATURE----- -----BEGIN OPENTIMESTAMPS GIT TIMESTAMP----- AQDwEJbLmWPCiB5L5H3tY8DJywAI8QRXzjlO8AiALKz7iooxNwCD3+MNLvkMji4t aHR0cHM6Ly9hbGljZS5idGMuY2FsZW5kYXIub3BlbnRpbWVzdGFtcHMub3Jn -----END OPENTIMESTAMPS GIT TIMESTAMP----- initial commit ``` -------------------------------- ### Create Timestamps with ots stamp Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Submits file hashes to remote calendar servers to generate timestamp proofs. Use --wait to block until Bitcoin confirmation is received. ```bash # Basic timestamping of a single file ots stamp document.pdf # Output: Submitting to remote calendar https://a.pool.opentimestamps.org # Submitting to remote calendar https://b.pool.opentimestamps.org # Submitting to remote calendar https://a.pool.eternitywall.com # Creates: document.pdf.ots # Timestamp multiple files at once (shares merkle tree for efficiency) ots stamp file1.txt file2.txt file3.txt # Creates: file1.txt.ots, file2.txt.ots, file3.txt.ots # Use specific calendar servers ots stamp -c https://a.pool.opentimestamps.org -c https://b.pool.opentimestamps.org document.pdf # Timestamp from stdin cat document.pdf | ots stamp # Outputs .ots to stdout # Wait for Bitcoin confirmation before returning (can take hours) ots stamp --wait document.pdf # Output: Submitting to remote calendar... # Timestamp not complete; waiting 30 sec before trying again # ... # Timestamp complete; saving # Require minimum number of calendar responses (default: 2) ots stamp -m 3 --timeout 10 document.pdf ``` -------------------------------- ### Sign and Timestamp Git Tags Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Create a signed tag that includes an OpenTimestamps attestation. ```bash $ git tag -s -m 'Hello World!' initial-commit HEAD ots: Submitting to remote calendar 'https://pool.opentimestamps.org' ``` ```bash $ git cat-file -p initial-commit object 6ccf07f8dc003728d5366eb435b883057306f1d1 type commit tag initial-commit tagger Peter Todd 1473148175 -0400 Hello World! -----BEGIN PGP SIGNATURE----- iQEcBAABCAAGBQJXznUQAAoJEGOZARBE6K+y5OQH/jJ18Eo9owPnMdTrkiS2lSaE /zToaC6LLqCfgxUPh4kpEKcH/sO9oBE6idayXs8/eb+twUu/52pDAWGcnquJr2bh oORzsnk6arCuCrYTa/0JcBK5Ff34HyaXH78qT26ts4cQKWJwRaHUbuFeXfBlfHHe ``` -------------------------------- ### Create a Standalone Timestamped Tag Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Use the --wait option to ensure the timestamp is fully completed by the Bitcoin blockchain before finalizing the tag. ```bash $ git tag -s -m 'Completed timestamp' full-timestamp HEAD ``` -------------------------------- ### Git Tag Verification with Timestamp Details Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/release-notes.md Shows the output of verifying a Git tag, including details about the timestamp attestations from various calendar servers and the final Bitcoin block attestation date. It also includes GPG signature verification. ```bash $ git tag -v opentimestamps-client-v0.5.1 object dcc45495b682c522170e8c2148b4759632e9d7fa type commit tag opentimestamps-client-v0.5.1 tagger Peter Todd 1513029381 -0500 Release opentimestamps-client-v0.5.1 olds: Got 1 attestation(s) from https://finney.calendar.eternitywall.com olds: Got 1 attestation(s) from https://bob.btc.calendar.opentimestamps.org olds: Success! Bitcoin block 498825 attests existence as of 2017-12-11 EST olds: Good timestamp gpg: Signature made Mon 11 Dec 2017 04:56:22 PM EST gpg: using RSA key 2481403DA5F091FB gpg: Good signature from "Peter Todd " gpg: aka "[jpeg image of size 5220]" ``` -------------------------------- ### Verify a Timestamp with Local Bitcoin Node Credentials Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md When verifying timestamps that require a local Bitcoin node, provide JSON-RPC credentials using the --bitcoin-node flag. Replace USER and PASS with your actual credentials. ```bash ots --bitcoin-node http://USER:PASS@127.0.0.1:8332/ verify examples/hello-world.txt.ots ``` -------------------------------- ### Verify Git timestamp Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Use the git tag -v command to verify the authenticity and timestamp of a signed Git tag. ```bash $ git tag -v full-timestamp object 6ccf07f8dc003728d5366eb435b883057306f1d1 type commit tag full-timestamp tagger Peter Todd 1473148584 -0400 Completed timestamp ots: Success! Bitcoin attests data existed as of Tue Sep 6 01:20:11 2016 UTC ots: Good timestamp gpg: Signature made Tue 06 Sep 2016 12:56:24 AM PDT gpg: using RSA key 6399011044E8AFB2 gpg: Good signature from "Peter Todd " gpg: aka "[jpeg image of size 5220]" ``` -------------------------------- ### Verify a Timestamp Proof Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Use the 'ots verify' command to check the validity of a timestamp proof file. This command can also resolve incomplete timestamps. ```bash ots verify README.md.ots ``` -------------------------------- ### Inspect Tag Contents Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Examine the raw contents of a timestamped tag to view the embedded transaction data and merkle path. ```bash $ git cat-file -p full-timestamp ``` -------------------------------- ### View Git Commit Object Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Use `git cat-file -p` to view the raw content of a Git commit object. ```bash $ git cat-file -p 7b94d37a71a236227c443e0f46e885101401020c tree 8faa3b9a240f4742d41b12fb62e95f8af25feb5e author Peter Todd 1349397737 -0700 committer Peter Todd 1349397737 -0700 Initial commit ``` -------------------------------- ### Git Integration for Timestamped Commits Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Configure Git to use the OpenTimestamps GPG wrapper for signing commits and tags. This embeds the timestamp within the PGP signature block. ```bash # Setup: Configure Git to use the OpenTimestamps GPG wrapper git config --global gpg.program /path/to/ots-git-gpg-wrapper.sh ``` ```bash # Create a timestamped signed commit git commit -S -m "Initial commit" # Output: ots: Submitting to remote calendar 'https://a.pool.opentimestamps.org' ``` ```bash # View the timestamped commit git cat-file -p HEAD # Output includes: # gpgsig -----BEGIN PGP SIGNATURE----- # ... # -----END PGP SIGNATURE----- # -----BEGIN OPENTIMESTAMPS GIT TIMESTAMP----- # AQDwEJbLmWPCiB5L5H3tY8DJywAI8QRX... # -----END OPENTIMESTAMPS GIT TIMESTAMP----- ``` ```bash # Verify commit signature and timestamp git log --show-signature # Output: ots: Got 1 attestation(s) from cache # ots: Success! Bitcoin attests data existed as of Fri Sep 9 23:03:52 2016 UTC # ots: Good timestamp # gpg: Good signature from "Developer " ``` ```bash # Create timestamped signed tag git tag -s -m "Release v1.0" v1.0 ``` ```bash # Verify tag with timestamp git tag -v v1.0 ``` -------------------------------- ### Display Timestamp Details with ots info Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Inspects the internal structure of a timestamp file, including commitment operations and attestations. ```bash # Display timestamp structure ots info document.pdf.ots # Output: File sha256 hash: efaa174f68e59705757460f4f7d204bd2b535cfd194d9d945418732129404ddb # Timestamp: # append 839037eef449dec6dac322ca97347c45 # sha256 # -> append 6b4023b6edd3a0eeeb09e5d718723b9e # sha256 # prepend 57d46515 # append eadd66b1688d5574 # verify PendingAttestation('https://alice.btc.calendar.opentimestamps.org') # Verbose output with more details ots -v info document.pdf.ots ``` -------------------------------- ### Python API for Timestamping Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Programmatic usage of the OpenTimestamps client via Python modules for custom integrations. Demonstrates creating, serializing, and deserializing detached timestamps. ```python from opentimestamps.core.timestamp import Timestamp from opentimestamps.core.op import OpSHA256 from opentimestamps.timestamp import DetachedTimestampFile from opentimestamps.core.serialize import StreamSerializationContext, StreamDeserializationContext # Create a detached timestamp from a file with open('document.pdf', 'rb') as f: file_timestamp = DetachedTimestampFile.from_fd(OpSHA256(), f) ``` ```python # Serialize timestamp to .ots file with open('document.pdf.ots', 'wb') as f: ctx = StreamSerializationContext(f) file_timestamp.serialize(ctx) ``` ```python # Deserialize and read existing timestamp with open('document.pdf.ots', 'rb') as f: ctx = StreamDeserializationContext(f) detached_timestamp = DetachedTimestampFile.deserialize(ctx) ``` ```python # Access timestamp information print(f"File hash: {detached_timestamp.file_digest.hex()}") print(f"Hash algorithm: {detached_timestamp.file_hash_op.TAG_NAME}") ``` ```python # Iterate over all attestations for msg, attestation in detached_timestamp.timestamp.all_attestations(): print(f"Attestation: {attestation}") ``` -------------------------------- ### Prune Timestamp Command Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Removes pending attestations from a timestamp file, keeping the best Bitcoin attestation. A backup of the original file is created. ```bash # Prune timestamp (removes pending attestations, keeps best Bitcoin attestation) uts prune document.pdf.ots ``` ```bash # Output: Success! Timestamp pruned # Creates: document.pdf.ots.bak (backup of original) ``` ```bash # Discard specific attestation types uts prune --discard pending:* document.pdf.ots # Remove all pending uts prune --discard ltc document.pdf.ots # Remove Litecoin attestations uts prune --discard unknown document.pdf.ots # Remove unknown attestations uts prune --discard pending:https://calendar.example.com document.pdf.ots # Remove specific calendar ``` ```bash # Verify attestations before pruning uts prune --verify btc document.pdf.ots ``` ```bash # Skip verification uts prune --no-verify document.pdf.ots ``` -------------------------------- ### Verify an OpenTimestamps Git Tag Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Use the standard Git tag verification command to check the integrity and attestation of a timestamped tag. ```bash $ git tag -v initial-commit ``` -------------------------------- ### Resolve Bitcoin Package Conflicts Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md This script resolves conflicts between the 'bitcoin' and 'python-bitcoinlib' packages. It uninstalls both, manually removes the 'bitcoin' directory from dist-packages, and then reinstalls the correct package. This is necessary to fix 'AttributeError: module 'bitcoin' has no attribute 'SelectParams'' or 'JSONDecodeError' issues. ```bash # uninstall the packages through pip pip3 uninstall bitcoin python-bitcoinlib # remove the bitcoin directory manually from your dist-packages folder rm -rf /usr/local/lib/python3.5/dist-packages/bitcoin # reinstall the required package pip3 install python-bitcoinlib ``` -------------------------------- ### View Git Commit with PGP Signature Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Examine a Git commit that includes an ASCII-armored PGP signature. This signature covers the commit data excluding the signature block itself. ```bash $ git cat-file -p a9d1ffc2e10dafcf17d31593a362b15c0a636bfc tree 548b1c88f537cd9939edeea094bfaff094f20874 parent 53c68bc976c581636b84c82fe814fab178adf8a6 author Peter Todd 1432826886 -0400 committer Peter Todd 1432827857 -0400 gpgsig -----BEGIN PGP SIGNATURE----- iQGrBAABCACVBQJVZzfSXhSAAAAAABUAQGJsb2NraGFzaEBiaXRjb2luLm9yZzAw MDAwMDAwMDAwMDAwMDAwMjFmZmUwZDk5ZmY5ZTJmNjI4YTc2M2JmN2NkZDUzYjY4 YzEzYzYxNzg5ZTdhNDMvFIAAAAAAFQARcGthLWFkZHJlc3NAZ251cGcub3JncGV0 ZUBwZXRlcnRvZC5vcmcACgkQJIFAPaXwkfuCcgf9HXnqAF17nzlv6slq4qdX2agQ 7rPWUtD8tGt0KVYAPmmijZ3guDRF4ISuUgcer4ixmBBezssKQG3ghqnlhq6OudBW T/MpVhkhIG3EDs58muhCsORPqO0CirhDiA5QFcZdCj/R7PDbZEygmI5OpS0HJK1j 9oeDEDuItV/450tfjd4eSOcnSkqvQBO822U70VdmO4MbHkG5kZ1mHJ6FyxfW737b hgayzXP1rEURmobsczBXa8jUyg/c30vxwV9yJkzWNFISvZK4/nXgnyWk5ft8cn5V YzMjt5lQuJwX/r6/MdRPRorPIOxdxUQzSN+8s8soZ3gqdIH/fuqCra7s2cntrw== =Lfsu -----END PGP SIGNATURE----- Add working ots command line utility ``` -------------------------------- ### Verify an Incomplete Timestamp Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Verify a timestamp that relies on remote calendars for attestation data. The client will fetch necessary information from the specified calendars. ```bash ots verify examples/incomplete.txt.ots ``` -------------------------------- ### Upgrade an Incomplete Timestamp Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/README.md Convert an incomplete timestamp into a complete one by fetching and embedding the necessary Bitcoin blockchain attestation data. This makes the timestamp independently verifiable. ```bash ots upgrade examples/incomplete.txt.ots ``` -------------------------------- ### View Git Commit Data Signed Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md This shows the exact data that is signed in a Git commit, excluding the PGP signature block itself. GnuPG can verify signatures even with unrecognized trailing data. ```bash $ git cat-file -p a9d1ffc2e10dafcf17d31593a362b15c0a636bfc tree 548b1c88f537cd9939edeea094bfaff094f20874 parent 53c68bc976c581636b84c82fe814fab178adf8a6 author Peter Todd 1432826886 -0400 committer Peter Todd 1432827857 -0400 Add working ots command line utility ``` -------------------------------- ### Verify Timestamps with ots verify Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Validates timestamp proofs against the Bitcoin blockchain. Requires a local Bitcoin Core node for full verification or can be run in offline/testnet modes. ```bash # Basic verification (auto-detects target file from .ots filename) ots verify document.pdf.ots # Output: Assuming target filename is 'document.pdf' # Success! Bitcoin block 358391 attests existence as of 2015-05-28 CEST # Specify target file explicitly ots verify -f document.pdf document.pdf.ots # Verify using a hex digest instead of file ots verify -d 7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730 document.pdf.ots # Verify with custom Bitcoin RPC node ots --bitcoin-node http://user:pass@127.0.0.1:8332/ verify document.pdf.ots # Verify using Bitcoin testnet ots --btc-testnet verify document.pdf.ots # Verify without Bitcoin (shows manual verification info) ots --no-bitcoin verify document.pdf.ots # Output: Not checking Bitcoin attestation; Bitcoin disabled # To verify manually, check that Bitcoin block 358391 has merkleroot # Wait for complete verification if timestamp is pending ots --wait verify document.pdf.ots ``` -------------------------------- ### Verify Timestamp Status Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md Check the verification status of a timestamp using git log. Verification may fail initially until the calendar server aggregates the data. ```bash $ git log --show-signature commit 6ccf07f8dc003728d5366eb435b883057306f1d1 ots: Calendar b'https://alice.btc.calendar.opentimestamps.org': No timestamp found ots: Pending attestation b'https://alice.btc.calendar.opentimestamps.org' ots: Could not verify timestamp gpg: Signature made Mon 05 Sep 2016 08:34:35 PM PDT gpg: using RSA key 6399011044E8AFB2 gpg: Good signature from "Peter Todd " [ultimate] gpg: aka "[jpeg image of size 5220]" [ultimate] Author: Peter Todd Date: Mon Sep 5 23:34:33 2016 -0400 initial commit ``` ```bash $ git log --show-signature commit 6ccf07f8dc003728d5366eb435b883057306f1d1 ots: Got 1 new attestation(s) from b'https://alice.btc.calendar.opentimestamps.org' ots: Success! Bitcoin attests data existed as of Fri Sep 9 23:03:52 2016 UTC ots: Good timestamp gpg: Signature made Mon 05 Sep 2016 08:34:35 PM PDT gpg: using RSA key 6399011044E8AFB2 gpg: Good signature from "Peter Todd " [ultimate] gpg: aka "[jpeg image of size 5220]" [ultimate] Author: Peter Todd Date: Mon Sep 5 23:34:33 2016 -0400 initial commit ``` ```bash $ git log --show-signature commit 6ccf07f8dc003728d5366eb435b883057306f1d1 ots: Got 1 attestation(s) from cache ots: Success! Bitcoin attests data existed as of Fri Sep 9 23:03:52 2016 UTC ots: Good timestamp gpg: Signature made Mon 05 Sep 2016 08:34:35 PM PDT gpg: using RSA key 6399011044E8AFB2 gpg: Good signature from "Peter Todd " [ultimate] gpg: aka "[jpeg image of size 5220]" [ultimate] Author: Peter Todd Date: Mon Sep 5 23:34:33 2016 -0400 initial commit ``` -------------------------------- ### Git Extract Command for File Timestamps Source: https://context7.com/opentimestamps/opentimestamps-client/llms.txt Extracts individual file timestamps from a timestamped Git commit, particularly useful when `--rehash-trees` was used during signing. Creates a .ots file for the specified file. ```bash # Extract timestamp for a specific file from HEAD commit uts git-extract path/to/file.txt # Creates: path/to/file.txt.ots ``` ```bash # Extract from specific commit uts git-extract path/to/file.txt timestamp.ots abc123 ``` ```bash # Extract with git-annex symlink support uts git-extract --annex path/to/large-file.bin ``` -------------------------------- ### Git Commit with OpenTimestamps Signature Source: https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md This Git commit includes both a PGP signature and an OpenTimestamps signature block. This allows for timestamping signed Git commits while maintaining compatibility with standard Git clients. ```bash $ git cat-file -p 48034652a83bb2119777bac5d84d24552454ab1f tree 25ebb56d6818abc82c8ff7ce9ac801b7ef052094 parent d265224445754a997d0bf06662567ed8c0d4dc25 author Peter Todd 1473060568 -0400 committer Peter Todd 1473060568 -0400 gpgsig -----BEGIN PGP SIGNATURE----- iQEcBAABCAAGBQJXzR7wAAoJEGOZARBE6K+yMT4H/jEhfBqe3Nr93SHdwVJ14rGg WIOtBG4t9KmJjYCBTXgQRTTI/0F+gGulMRr5jeDTgmQpPNKIHKjv62kPPtcxqQQr 3AfByOjNLja3saAxEwFI++gkNgdeD7eqJex6P0OnVVixklyznVXvtEq1UoESBHRp MIGbLpR3jAgxT58ZPrezHu9p2ifT/uT6MrwjYlvJzOfjK2t9sBLXfUUtzWfmxUNA +wfQv/X5vePzcZth0AIKWwPAm77HtBGlJXYg9e8GPUBS6t6t2nHkyQIsgXYeFwFy 9nf4W3yi1hbuvEV2DtqGQZjF/s9GIhLBS5I5p0RGy4zt55inGImlSekPBSuKzmo= =7pUu -----END PGP SIGNATURE----- -----BEGIN OPENTIMESTAMPS GIT TIMESTAMP----- AQDwEPyUcFjpQf0P0ntzUeqBn8MI8QRXzR7zAIPf4w0u+QyOLi1odHRwczovL2Fs aWNlLmJ0Yy5jYWxlbmRhci5vcGVudGltZXN0YW1wcy5vcmc= -----END OPENTIMESTAMPS GIT TIMESTAMP----- Add Git GnuPG wrapper Allows signed git commits to be timestamped. ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.