Class: Secp256k1::PrivateKey
- Defined in:
- lib/secp256k1/key.rb
Constant Summary
Constants included from ECDSA
ECDSA::SIZE_COMPACT, ECDSA::SIZE_SERIALIZED
Instance Attribute Summary collapse
-
#pubkey ⇒ Object
readonly
Returns the value of attribute pubkey.
Instance Method Summary collapse
- #ecdsa_sign(msg, raw: false, digest: Digest::SHA256) ⇒ Object
- #ecdsa_sign_recoverable(msg, raw: false, digest: Digest::SHA256) ⇒ Object
-
#initialize(privkey: nil, raw: true, flags: ALL_FLAGS, ctx: nil) ⇒ PrivateKey
constructor
A new instance of PrivateKey.
- #set_raw_privkey(privkey) ⇒ Object
-
#tweak_add(scalar) ⇒ Object
Tweak the current private key by adding a 32 bytes scalar to it and return a new raw private key composed of 32 bytes.
-
#tweak_mul(scalar) ⇒ Object
Tweak the current private key by multiplying it by a 32 byte scalar and return a new raw private key composed of 32 bytes.
Methods included from ECDSA
#ecdsa_deserialize, #ecdsa_deserialize_compact, #ecdsa_recover, #ecdsa_recoverable_convert, #ecdsa_recoverable_deserialize, #ecdsa_recoverable_serialize, #ecdsa_serialize, #ecdsa_serialize_compact, #ecdsa_signature_normalize
Methods included from Utils
#decode_hex, #encode_hex, #hash32
Constructor Details
#initialize(privkey: nil, raw: true, flags: ALL_FLAGS, ctx: nil) ⇒ PrivateKey
Returns a new instance of PrivateKey.
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/secp256k1/key.rb', line 143 def initialize(privkey: nil, raw: true, flags: ALL_FLAGS, ctx: nil) raise AssertError, "invalid flags" unless [ALL_FLAGS, FLAG_SIGN].include?(flags) super(ctx, flags) @pubkey = nil @private_key = nil if privkey if raw raise ArgumentError, "privkey must be composed of 32 bytes" unless privkey.instance_of?(String) && privkey.size == 32 set_raw_privkey privkey else deserialize privkey end else set_raw_privkey generate_private_key end end |
Instance Attribute Details
#pubkey ⇒ Object (readonly)
Returns the value of attribute pubkey.
141 142 143 |
# File 'lib/secp256k1/key.rb', line 141 def pubkey @pubkey end |
Instance Method Details
#ecdsa_sign(msg, raw: false, digest: Digest::SHA256) ⇒ Object
163 164 165 166 167 168 169 170 171 |
# File 'lib/secp256k1/key.rb', line 163 def ecdsa_sign(msg, raw: false, digest: Digest::SHA256) msg32 = hash32 msg, raw, digest raw_sig = C::ECDSASignature.new.pointer res = C.secp256k1_ecdsa_sign @ctx, raw_sig, msg32, @private_key, nil, nil raise AssertError, "failed to sign" unless res == 1 raw_sig end |
#ecdsa_sign_recoverable(msg, raw: false, digest: Digest::SHA256) ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/secp256k1/key.rb', line 173 def ecdsa_sign_recoverable(msg, raw: false, digest: Digest::SHA256) raise LoadModuleError, "libsecp256k1 recovery module is not enabled" unless C.module_recovery_enabled? msg32 = hash32 msg, raw, digest raw_sig = C::ECDSARecoverableSignature.new.pointer res = C.secp256k1_ecdsa_sign_recoverable @ctx, raw_sig, msg32, @private_key, nil, nil raise AssertError, "failed to sign" unless res == 1 raw_sig end |
#set_raw_privkey(privkey) ⇒ Object
185 186 187 188 189 |
# File 'lib/secp256k1/key.rb', line 185 def set_raw_privkey(privkey) raise ArgumentError, "invalid private key" unless C.secp256k1_ec_seckey_verify(@ctx, privkey) @private_key = privkey update_public_key end |
#tweak_add(scalar) ⇒ Object
Tweak the current private key by adding a 32 bytes scalar to it and return a new raw private key composed of 32 bytes.
195 196 197 |
# File 'lib/secp256k1/key.rb', line 195 def tweak_add(scalar) tweak_private :secp256k1_ec_privkey_tweak_add, scalar end |
#tweak_mul(scalar) ⇒ Object
Tweak the current private key by multiplying it by a 32 byte scalar and return a new raw private key composed of 32 bytes.
203 204 205 |
# File 'lib/secp256k1/key.rb', line 203 def tweak_mul(scalar) tweak_private :secp256k1_ec_pubkey_tweak_mul, scalar end |