@@ -8,10 +8,11 @@ use ed25519_dalek::{
88 VerifyingKey as Ed25519VerifyingKey ,
99} ;
1010use length_prefixed:: WriteLengthPrefixedBytesExt ;
11- use signed_note:: { compute_key_id, KeyName , NoteError , NoteSignature , NoteVerifier , SignatureType } ;
11+ use sha2:: { Digest , Sha256 } ;
12+ use signed_note:: { KeyName , NoteError , NoteSignature , NoteVerifier } ;
1213use tlog_tiles:: { CheckpointSigner , CheckpointText , Hash , LeafIndex , UnixTimestamp } ;
1314
14- use crate :: RelativeOid ;
15+ use crate :: { RelativeOid , ID_RDNA_TRUSTANCHOR_ID } ;
1516
1617pub type TrustAnchorID = RelativeOid ;
1718
@@ -21,14 +22,9 @@ pub struct MTCSubtreeCosigner {
2122}
2223
2324impl MTCSubtreeCosigner {
24- pub fn new (
25- cosigner_id : TrustAnchorID ,
26- log_id : TrustAnchorID ,
27- name : KeyName ,
28- k : Ed25519SigningKey ,
29- ) -> Self {
25+ pub fn new ( cosigner_id : TrustAnchorID , log_id : TrustAnchorID , k : Ed25519SigningKey ) -> Self {
3026 Self {
31- v : MTCSubtreeNoteVerifier :: new ( cosigner_id, log_id, name , k. verifying_key ( ) ) ,
27+ v : MTCSubtreeNoteVerifier :: new ( cosigner_id, log_id, k. verifying_key ( ) ) ,
3228 k,
3329 }
3430 }
@@ -115,18 +111,24 @@ impl MTCSubtreeNoteVerifier {
115111 pub fn new (
116112 cosigner_id : TrustAnchorID ,
117113 log_id : TrustAnchorID ,
118- name : KeyName ,
119114 verifying_key : Ed25519VerifyingKey ,
120115 ) -> Self {
116+ let name = KeyName :: new ( format ! (
117+ "oid/{}.{}" ,
118+ ID_RDNA_TRUSTANCHOR_ID . to_string( ) ,
119+ cosigner_id. to_string( )
120+ ) )
121+ . unwrap ( ) ;
122+
121123 let id = {
122- // TODO what signature algorithm to use for mtc-subtree/v1?
123- let pubkey = [
124- & [ SignatureType :: Undefined as u8 ] ,
125- verifying_key. to_bytes ( ) . as_slice ( ) ,
126- ]
127- . concat ( ) ;
128- compute_key_id ( & name, & pubkey)
124+ let mut hasher = Sha256 :: new ( ) ;
125+ hasher. update ( name. as_str ( ) . as_bytes ( ) ) ;
126+ hasher. update ( & [ 0x0A , 0xFF ] ) ;
127+ hasher. update ( b"mtc-subtree/v1" ) ;
128+ let result = hasher. finalize ( ) ;
129+ u32:: from_be_bytes ( result[ 0 ..4 ] . try_into ( ) . unwrap ( ) )
129130 } ;
131+
130132 Self {
131133 cosigner_id,
132134 log_id,
@@ -245,11 +247,9 @@ mod tests {
245247 let tree = TreeWithTimestamp :: new ( tree_size, record_hash ( b"hello world" ) , timestamp) ;
246248 let signer = {
247249 let sk = Ed25519SigningKey :: generate ( & mut rng) ;
248- let name = KeyName :: new ( "my-signer" . into ( ) ) . unwrap ( ) ;
249250 MTCSubtreeCosigner :: new (
250251 TrustAnchorID :: from_str ( "1.2.3" ) . unwrap ( ) ,
251252 TrustAnchorID :: from_str ( "4.5.6" ) . unwrap ( ) ,
252- name,
253253 sk,
254254 )
255255 } ;
0 commit comments