@@ -27,6 +27,7 @@ import {
2727 clampPrivateKey ,
2828 setPublicKeyTypeByte ,
2929 generateSignedPreKey ,
30+ generateKyberPreKey ,
3031} from '../Curve.js' ;
3132import type { SignalProtocolStore } from '../SignalProtocolStore.js' ;
3233import { GLOBAL_ZONE } from '../SignalProtocolStore.js' ;
@@ -597,12 +598,9 @@ describe('SignalProtocolStore', () => {
597598 } ) ;
598599
599600 async function testInvalidAttributes ( ) {
600- try {
601- await store . saveIdentityWithAttributes ( theirAci , attributes ) ;
602- throw new Error ( 'saveIdentityWithAttributes should have failed' ) ;
603- } catch ( error ) {
604- // good. we expect to fail with invalid attributes.
605- }
601+ await assert . isRejected (
602+ store . saveIdentityWithAttributes ( theirAci , attributes )
603+ ) ;
606604 }
607605
608606 it ( 'rejects an invalid publicKey' , async ( ) => {
@@ -1637,4 +1635,96 @@ describe('SignalProtocolStore', () => {
16371635 // Note: signature is ignored.
16381636 } ) ;
16391637 } ) ;
1638+
1639+ describe ( 'maybeRemoveKyberPreKey' , ( ) => {
1640+ beforeEach ( async ( ) => {
1641+ await store . clearKyberPreKeyStore ( ) ;
1642+ } ) ;
1643+
1644+ afterEach ( async ( ) => {
1645+ await store . clearKyberPreKeyStore ( ) ;
1646+ } ) ;
1647+
1648+ it ( 'should detect duplicate triples' , async ( ) => {
1649+ await store . storeKyberPreKeys ( ourAci , [
1650+ {
1651+ createdAt : Date . now ( ) ,
1652+ data : generateKyberPreKey ( identityKey , 1 ) . serialize ( ) ,
1653+ isConfirmed : true ,
1654+ isLastResort : true ,
1655+ keyId : 1 ,
1656+ ourServiceId : ourAci ,
1657+ } ,
1658+ ] ) ;
1659+
1660+ await store . maybeRemoveKyberPreKey ( ourAci , {
1661+ keyId : 1 ,
1662+ signedPreKeyId : 1 ,
1663+ baseKey : testKey . publicKey ,
1664+ } ) ;
1665+
1666+ await assert . isRejected (
1667+ store . maybeRemoveKyberPreKey ( ourAci , {
1668+ keyId : 1 ,
1669+ signedPreKeyId : 1 ,
1670+ baseKey : testKey . publicKey ,
1671+ } ) ,
1672+ 'Duplicate kyber triple 1:1'
1673+ ) ;
1674+ } ) ;
1675+
1676+ it ( 'should ignore triples for non last resort keys' , async ( ) => {
1677+ await store . storeKyberPreKeys ( ourAci , [
1678+ {
1679+ createdAt : Date . now ( ) ,
1680+ data : generateKyberPreKey ( identityKey , 1 ) . serialize ( ) ,
1681+ isConfirmed : true ,
1682+ isLastResort : false ,
1683+ keyId : 1 ,
1684+ ourServiceId : ourAci ,
1685+ } ,
1686+ ] ) ;
1687+
1688+ await store . maybeRemoveKyberPreKey ( ourAci , {
1689+ keyId : 1 ,
1690+ signedPreKeyId : 1 ,
1691+ baseKey : testKey . publicKey ,
1692+ } ) ;
1693+
1694+ // this should not throw since the key was not last resort
1695+ await store . maybeRemoveKyberPreKey ( ourAci , {
1696+ keyId : 1 ,
1697+ signedPreKeyId : 1 ,
1698+ baseKey : testKey . publicKey ,
1699+ } ) ;
1700+ } ) ;
1701+
1702+ it ( 'should remove triples when removing the key' , async ( ) => {
1703+ await store . storeKyberPreKeys ( ourAci , [
1704+ {
1705+ createdAt : Date . now ( ) ,
1706+ data : generateKyberPreKey ( identityKey , 1 ) . serialize ( ) ,
1707+ isConfirmed : true ,
1708+ isLastResort : true ,
1709+ keyId : 1 ,
1710+ ourServiceId : ourAci ,
1711+ } ,
1712+ ] ) ;
1713+
1714+ await store . maybeRemoveKyberPreKey ( ourAci , {
1715+ keyId : 1 ,
1716+ signedPreKeyId : 1 ,
1717+ baseKey : testKey . publicKey ,
1718+ } ) ;
1719+
1720+ await store . removeKyberPreKeys ( ourAci , [ 1 ] ) ;
1721+
1722+ // this should not throw since we removed the key
1723+ await store . maybeRemoveKyberPreKey ( ourAci , {
1724+ keyId : 1 ,
1725+ signedPreKeyId : 1 ,
1726+ baseKey : testKey . publicKey ,
1727+ } ) ;
1728+ } ) ;
1729+ } ) ;
16401730} ) ;
0 commit comments