pub struct SigningKey<CS: CipherSuite> { /* private fields */ }Expand description
The Device Signing Key.
Implementations§
Source§impl<CS: CipherSuite> SigningKey<CS>
impl<CS: CipherSuite> SigningKey<CS>
Source§impl<CS: CipherSuite> SigningKey<CS>
impl<CS: CipherSuite> SigningKey<CS>
Sourcepub fn id(&self) -> Result<SigningKeyId, IdError>
pub fn id(&self) -> Result<SigningKeyId, IdError>
Uniquely identifies the SigningKey
Two keys with the same ID are the same key.
Sourcepub fn public(&self) -> Result<VerifyingKey<CS>, PkError>
pub fn public(&self) -> Result<VerifyingKey<CS>, PkError>
Returns the public half of the key.
Source§impl<CS: CipherSuite> SigningKey<CS>
impl<CS: CipherSuite> SigningKey<CS>
Sourcepub fn sign(&self, msg: &[u8], context: &[u8]) -> Result<Signature<CS>, Error>
pub fn sign(&self, msg: &[u8], context: &[u8]) -> Result<Signature<CS>, Error>
Creates a signature over msg bound to some context.
msg must NOT be pre-hashed.
§Example
use aranya_crypto::{
Rng, SigningKey,
default::{DefaultCipherSuite, DefaultEngine},
};
let sk = SigningKey::<DefaultCipherSuite>::new(Rng);
const MESSAGE: &[u8] = b"hello, world!";
const CONTEXT: &[u8] = b"doc test";
let sig = sk.sign(MESSAGE, CONTEXT).expect("should not fail");
sk.public()
.expect("signing key should be valid")
.verify(MESSAGE, CONTEXT, &sig)
.expect("should not fail");
sk.public()
.expect("signing key should be valid")
.verify(MESSAGE, b"wrong context", &sig)
.expect_err("should fail");
let wrong_sig = sk
.sign(b"different", b"signature")
.expect("should not fail");
sk.public()
.expect("signing key should be valid")
.verify(MESSAGE, CONTEXT, &wrong_sig)
.expect_err("should fail");Sourcepub fn sign_cmd(&self, cmd: Cmd<'_>) -> Result<(Signature<CS>, CmdId), Error>
pub fn sign_cmd(&self, cmd: Cmd<'_>) -> Result<(Signature<CS>, CmdId), Error>
Creates a signature over a named policy command.
§Example
use aranya_crypto::{
BaseId, Cmd, Rng, SigningKey,
default::{DefaultCipherSuite, DefaultEngine},
id::IdExt as _,
policy::CmdId,
};
let sk = SigningKey::<DefaultCipherSuite>::new(Rng);
let data = b"... some command data ...";
let name = "AddDevice";
let parent_id = &CmdId::random(Rng);
let good_cmd = Cmd {
data,
name,
parent_id,
};
let (sig, _) = sk.sign_cmd(good_cmd).expect("should not fail");
sk.public()
.expect("signing key should be valid")
.verify_cmd(good_cmd, &sig)
.expect("should not fail");
let wrong_name_cmd = Cmd {
data,
name: "wrong name",
parent_id,
};
sk.public()
.expect("signing key should be valid")
.verify_cmd(wrong_name_cmd, &sig)
.expect_err("should fail");
let wrong_id_cmd = Cmd {
data,
name,
parent_id: &CmdId::random(Rng),
};
sk.public()
.expect("signing key should be valid")
.verify_cmd(wrong_id_cmd, &sig)
.expect_err("should fail");
let wrong_sig_cmd = Cmd {
data: b"different",
name: "signature",
parent_id: &CmdId::random(Rng),
};
let (wrong_sig, _) = sk.sign_cmd(wrong_sig_cmd).expect("should not fail");
sk.public()
.expect("signing key should be valid")
.verify_cmd(good_cmd, &wrong_sig)
.expect_err("should fail");Trait Implementations§
Source§impl<CS: CipherSuite> Clone for SigningKey<CS>
impl<CS: CipherSuite> Clone for SigningKey<CS>
Source§impl<CS: CipherSuite> ConstantTimeEq for SigningKey<CS>
impl<CS: CipherSuite> ConstantTimeEq for SigningKey<CS>
Source§impl<CS: CipherSuite> Debug for SigningKey<CS>
impl<CS: CipherSuite> Debug for SigningKey<CS>
Source§impl<CS: CipherSuite> Display for SigningKey<CS>
impl<CS: CipherSuite> Display for SigningKey<CS>
Source§impl<CS: CipherSuite> Identified for SigningKey<CS>
impl<CS: CipherSuite> Identified for SigningKey<CS>
Source§impl<CS: CipherSuite> UnwrappedKey<CS> for SigningKey<CS>
impl<CS: CipherSuite> UnwrappedKey<CS> for SigningKey<CS>
Source§fn into_secret(self) -> Secret<CS>
fn into_secret(self) -> Secret<CS>
Converts itself into the underlying
Secret.Source§fn try_from_secret(key: UnwrappedSecret<CS>) -> Result<Self, WrongKeyType>
fn try_from_secret(key: UnwrappedSecret<CS>) -> Result<Self, WrongKeyType>
Converts itself from a
UnwrappedSecret.impl<CS: CipherSuite> ZeroizeOnDrop for SigningKey<CS>
Auto Trait Implementations§
impl<CS> !Freeze for SigningKey<CS>
impl<CS> !RefUnwindSafe for SigningKey<CS>
impl<CS> Send for SigningKey<CS>
impl<CS> !Sync for SigningKey<CS>
impl<CS> Unpin for SigningKey<CS>
impl<CS> UnsafeUnpin for SigningKey<CS>
impl<CS> UnwindSafe for SigningKey<CS>
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.