gb.openssl: Add tests for new Pbkdf2 and Scrypt methods

[GB.OPENSSL]
* NEW: Add beginning of a test suite.
* OPT: Avoid doubles in integer power-of-two test.
This commit is contained in:
Tobias Boege 2020-06-07 01:51:17 +02:00
parent b1fbac987e
commit f5ca983f88
5 changed files with 48 additions and 1 deletions

View file

@ -0,0 +1,2 @@
[Desktop Entry]
Icon=./.icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,8 @@
# Gambas Project File 3.0
Startup=Main
Version=0.0.1
Component=gb.openssl
Component=gb.test
TabSize=2
Language=en_US
Packager=1

View file

@ -0,0 +1,36 @@
' Gambas module file
' https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-00#page-10
Private Const PBKDF2_SHA256_80000_64 As String = ""
"\x4d\xdc\xd8\xf6\x0b\x98\xbe\x21\x83\x0c\xee\x5e\xf2\x27\x01\xf9"
"\x64\x1a\x44\x18\xd0\x4c\x04\x14\xae\xff\x08\x87\x6b\x34\xab\x56"
"\xa1\xd4\x25\xa1\x22\x58\x33\x54\x9a\xdb\x84\x1b\x51\xc9\xb3\x17"
"\x6a\x27\x2b\xde\xbb\xa1\xd0\x78\x47\x8f\x62\xb3\x97\xf3\x3c\x8d"
Private Const SCRYPT_1024_8_64 As String = ""
"\xfd\xba\xbe\x1c\x9d\x34\x72\x00\x78\x56\xe7\x19\x0d\x01\xe9\xfe"
"\x7c\x6a\xd7\xcb\xc8\x23\x78\x30\xe7\x73\x76\x63\x4b\x37\x31\x62"
"\x2e\xaf\x30\xd9\x2e\x22\xa3\x88\x6f\xf1\x09\x27\x9d\x98\x30\xda"
"\xc7\x27\xaf\xb9\x4a\x83\xee\x6d\x83\x60\xcb\xdf\xa2\xcc\x06\x40"
Public Sub Main()
Dim p, s As String
Dim a As New String[]
Test.Plan(4)
p = OpenSSL.Pbkdf2("Password", "NaCl", 80000, 64, "SHA256")
s = OpenSSL.Scrypt("password", "NaCl", 1024, 8, 16, 64)
Assert.Equals(Base64$(p), Base64$(PBKDF2_SHA256_80000_64), "PBKDF2 matches test vector")
Assert.Equals(Base64$(s), Base64$(SCRYPT_1024_8_64), "scrypt matches test vector")
Test.Note("Testing again for memory management")
For i As Integer = 1 To 2 ^ 10
a.Add(OpenSSL.RandomBytes(2 ^ 14))
Next
Assert.Equals(Base64$(p), Base64$(PBKDF2_SHA256_80000_64), "PBKDF2 matches test vector")
Assert.Equals(Base64$(s), Base64$(SCRYPT_1024_8_64), "scrypt matches test vector")
End

View file

@ -149,7 +149,8 @@ BEGIN_METHOD(OpenSSL_Scrypt, GB_STRING password; GB_STRING salt; GB_LONG N; GB_L
GB.Error("Invalid Parameter: N must be greater than 1"); GB.Error("Invalid Parameter: N must be greater than 1");
return; return;
} }
if (ceil(log2(lN)) != floor(log2(lN))) { /* Bitwise power of 2 test */
if (lN == 0 || (lN & (lN - 1)) != 0) {
GB.Error("Invalid Parameter: N must be a power of 2"); GB.Error("Invalid Parameter: N must be a power of 2");
return; return;
} }