@@ -2,6 +2,7 @@ import "package:pinenacl/ed25519.dart";
2
2
import "package:test/test.dart" ;
3
3
4
4
import "package:wampproto/auth.dart" ;
5
+ import "package:wampproto/messages.dart" ;
5
6
import "package:wampproto/src/auth/cryptosign.dart" ;
6
7
import "package:wampproto/src/auth/wampcra.dart" ;
7
8
@@ -59,6 +60,19 @@ void main() {
59
60
const testSecret = "private" ;
60
61
var testSecretBytes = Uint8List .fromList (testSecret.codeUnits);
61
62
63
+ const String authID = "foo" ;
64
+ const String salt = "salt" ;
65
+ const int keyLength = 32 ;
66
+ const int iterations = 1000 ;
67
+ const String craChallenge =
68
+ '''{"nonce":"cdcb3b12d56e12825be99f38f55ba43f","authprovider":"provider","authid":"foo","authrole":"anonymous","authmethod":"wampcra","session":1,"timestamp":"2024-05-07T09:25:13.307Z"}''' ;
69
+ final Map <String , dynamic > authExtra = {
70
+ "challenge" : craChallenge,
71
+ "salt" : salt,
72
+ "iterations" : iterations,
73
+ "keylen" : keyLength,
74
+ };
75
+
62
76
test ("GenerateCRAChallenge" , () async {
63
77
var challenge = generateWampCRAChallenge (1 , "anonymous" , "anonymous" , "static" );
64
78
@@ -89,5 +103,29 @@ void main() {
89
103
var isVerified = verifyWampCRASignature (signature.trim (), challenge.trim (), testSecretBytes);
90
104
expect (isVerified, true );
91
105
});
106
+
107
+ test ("SignCRAChallengeWithSalt" , () async {
108
+ final challenge = Challenge (WAMPCRAAuthenticator .type, authExtra);
109
+ final authenticator = WAMPCRAAuthenticator (authID, authExtra, testSecret);
110
+
111
+ final authenticate = authenticator.authenticate (challenge);
112
+ final saltSecret = await runCommand ("auth cra derive-key $salt $testSecret -i $iterations -l $keyLength " );
113
+
114
+ await runCommand ("auth cra verify-signature $craChallenge ${authenticate .signature } ${saltSecret .trim ()}" );
115
+ });
116
+
117
+ test ("VerifyCRASignatureWithSalt" , () async {
118
+ final challenge = await runCommand ("auth cra generate-challenge 1 $authID anonymous provider" );
119
+ final saltSecret = await runCommand ("auth cra derive-key $salt $testSecret -i $iterations -l $keyLength " );
120
+
121
+ final signature = await runCommand ("auth cra sign-challenge ${challenge .trim ()} ${saltSecret .trim ()}" );
122
+
123
+ final isVerified = verifyWampCRASignature (
124
+ signature.trim (),
125
+ challenge.trim (),
126
+ Uint8List .fromList (saltSecret.trim ().codeUnits),
127
+ );
128
+ expect (isVerified, true );
129
+ });
92
130
});
93
131
}
0 commit comments