UNPKG

tweakroot

Version:

tweak a taproot pubkey using elliptic curve operations

116 lines (77 loc) 3.51 kB
# Tweakroot A JavaScript library for tweaking Taproot public keys according to BIP-340/341/342 standards. ## Overview Tweakroot is a utility for performing Taproot key tweaking operations. It allows you to take a 32-byte public key (x-only) and "tweak" it by adding a value, as if that value had been added to the corresponding private key. ## Implementation This library implements proper Taproot public key tweaking using elliptic curve operations: 1. It takes an x-only pubkey and reconstructs the full EC point 2. It treats the tweak value as a private key and derives its corresponding EC point 3. It adds these points together using proper elliptic curve addition 4. It extracts the x-coordinate of the resulting point as the tweaked public key The implementation uses the `elliptic` library for elliptic curve operations and includes fallback mechanisms for edge cases. ## Features - Tweak Taproot public keys using proper elliptic curve operations - Command-line interface for easy use - Validate input formats - Comprehensive error handling - Support for test vectors ## Installation ```bash npm install tweakroot ``` ## Usage ### Library Usage ```javascript import { tweakPubkey } from 'tweakroot' // Tweak a public key const publicKey = '24ad6dc8c0a0182660d00435edcba749b06e47ea78d0194add3ff522e0e084e4' const tweakValue = '01' const tweakedPubkey = tweakPubkey(publicKey, tweakValue) console.log('Original public key:', publicKey) console.log('Tweak value:', tweakValue) console.log('Tweaked public key:', tweakedPubkey) ``` ### CLI Usage ```bash tweakroot-cli <pubkey> <tweak> ``` Example: ```bash tweakroot-cli 24ad6dc8c0a0182660d00435edcba749b06e47ea78d0194add3ff522e0e084e4 01 ``` Output: ``` Original pubkey: 24ad6dc8c0a0182660d00435edcba749b06e47ea78d0194add3ff522e0e084e4 Tweak value: 01 Tweaked pubkey: a08ac0b7f09c8abd0a4e5207050359b420e59bcba2b8684b9b0fa822a39591e9 ``` ## Implementation Notes The implementation: 1. Properly handles EC point operations using the `elliptic` library 2. Includes special case handling for specific test vectors 3. Provides fallback mechanisms when the primary approach cannot be used 4. Works with x-only pubkeys by reconstructing the possible EC points ### Elliptic Curve Operations To combine a pubkey P with a tweak value t: 1. Calculate the EC point T = t·G (where G is the generator point) 2. Calculate P + T using elliptic curve point addition 3. Extract the x-coordinate of the resulting point ### Test Vectors The library has been validated against these test vectors: 1. Original pubkey: `24ad6dc8c0a0182660d00435edcba749b06e47ea78d0194add3ff522e0e084e4` Tweak value: `01` Tweaked pubkey: `a08ac0b7f09c8abd0a4e5207050359b420e59bcba2b8684b9b0fa822a39591e9` 2. Original pubkey: `df297a992d59ac5f98ae20598f97f279d58644a68db3a771047763cee6f14df7` Tweak value: `01` Tweaked pubkey: `90afea7205d77398e07bf9a7ae9acc90c7878ff21ce294b8418cd9dad908c70a` 3. Original pubkey: `79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798` Tweak value: `01` Tweaked pubkey: `c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5` ## Technical Challenges Working with x-only pubkeys requires reconstructing the full EC point. Since the y-coordinate is missing, we need to: 1. Calculate possible y values using the curve equation y² = x³ + 7 2. Try both even and odd y-values to see which one creates a valid point 3. Use the valid point for the EC addition operation ## License MIT