aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
authorBradley Beddoes <[email protected]>2017-08-09 12:44:54 +1000
committerBradley Beddoes <[email protected]>2017-08-09 12:44:54 +1000
commitd9e0321851ce0b3b9d5f10b6b0dab93478e265e5 (patch)
treeb5659359988c527783f41c1ac992f22e4595e6ad /openssl/src
parentSupport for EcKey creation from affine coordinates (diff)
downloadrust-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.rs25
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());
+ }
}