diff options
| author | Bradley Beddoes <[email protected]> | 2017-08-09 12:44:54 +1000 |
|---|---|---|
| committer | Bradley Beddoes <[email protected]> | 2017-08-09 12:44:54 +1000 |
| commit | d9e0321851ce0b3b9d5f10b6b0dab93478e265e5 (patch) | |
| tree | b5659359988c527783f41c1ac992f22e4595e6ad /openssl/src | |
| parent | Support for EcKey creation from affine coordinates (diff) | |
| download | rust-openssl-d9e0321851ce0b3b9d5f10b6b0dab93478e265e5.tar.xz rust-openssl-d9e0321851ce0b3b9d5f10b6b0dab93478e265e5.zip | |
Set the private key within EcKeyBuilder
The initial usecase here is creating EcKey instances from JWK
representations, that hold private keys, as defined within RFC 7517.
Diffstat (limited to 'openssl/src')
| -rw-r--r-- | openssl/src/ec.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/openssl/src/ec.rs b/openssl/src/ec.rs index 5ff9fd5b..e221b411 100644 --- a/openssl/src/ec.rs +++ b/openssl/src/ec.rs @@ -472,6 +472,15 @@ impl EcKeyBuilderRef { ).map(|_| self) } } + + /// Sets the private key. + pub fn set_private_key(&mut self, + key: &BigNumRef) + -> Result<&mut EcKeyBuilderRef, ErrorStack> { + unsafe { + cvt(ffi::EC_KEY_set_private_key(self.as_ptr(), key.as_ptr())).map(|_| self) + } + } } #[cfg(test)] @@ -573,4 +582,20 @@ mod test { assert!(ec_key.check_key().is_ok()); assert!(ec_key.public_key().is_some()); } + + #[test] + fn set_private_key() { + let group = EcGroup::from_curve_name(nid::X9_62_PRIME256V1).unwrap(); + let d = data_encoding::base64url::decode_nopad("870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE".as_bytes()) + .unwrap(); + + let dbn = BigNum::from_slice(&d).unwrap(); + + let mut builder = EcKeyBuilder::new().unwrap(); + builder.set_group(&group).unwrap(); + builder.set_private_key(&dbn).unwrap(); + + let ec_key = builder.build(); + assert!(ec_key.private_key().is_some()); + } } |