88 lines
3.2 KiB
Vala
88 lines
3.2 KiB
Vala
|
/* rfc.vala
|
||
|
*
|
||
|
* Written in 2022 by Lucas
|
||
|
*
|
||
|
* To the extent possible under law, the author(s) have dedicated all
|
||
|
* copyright and related and neighboring rights to this software to the
|
||
|
* public domain worldwide. This software is distributed without any
|
||
|
* warranty.
|
||
|
*
|
||
|
* You should have received a copy of the CC0 Public Domain Dedication
|
||
|
* along with this software. If not, see
|
||
|
* <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||
|
*/
|
||
|
|
||
|
unowned string RFC_4226_KEY = "12345678901234567890";
|
||
|
unowned string RFC_6238_SHA1_KEY = "12345678901234567890";
|
||
|
unowned string RFC_6238_SHA256_KEY = "12345678901234567890123456789012";
|
||
|
unowned string RFC_6238_SHA512_KEY = "123456789012345678901234567890" +
|
||
|
"1234567890123456789012345678901234";
|
||
|
|
||
|
void add_rfc_4226_test_vectors() {
|
||
|
Test.add_func("/otp/rfc4226", () => {
|
||
|
Otp.Hotp hotp = new Otp.Hotp(RFC_4226_KEY.data);
|
||
|
|
||
|
assert(hotp.get_value_at(0) == "755224");
|
||
|
assert(hotp.get_value_at(1) == "287082");
|
||
|
assert(hotp.get_value_at(2) == "359152");
|
||
|
assert(hotp.get_value_at(3) == "969429");
|
||
|
assert(hotp.get_value_at(4) == "338314");
|
||
|
assert(hotp.get_value_at(5) == "254676");
|
||
|
assert(hotp.get_value_at(6) == "287922");
|
||
|
assert(hotp.get_value_at(7) == "162583");
|
||
|
assert(hotp.get_value_at(8) == "399871");
|
||
|
assert(hotp.get_value_at(9) == "520489");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
void add_rfc_6238_sha1_test_vectors() {
|
||
|
Test.add_func("/otp/rfc6238/sha1", () => {
|
||
|
Otp.Totp totp = new Otp.Totp(RFC_6238_SHA1_KEY.data, 30, 8,
|
||
|
ChecksumType.SHA1);
|
||
|
|
||
|
assert(totp.get_value_at_timestamp(59) == "94287082");
|
||
|
assert(totp.get_value_at_timestamp(1111111109) == "07081804");
|
||
|
assert(totp.get_value_at_timestamp(1111111111) == "14050471");
|
||
|
assert(totp.get_value_at_timestamp(1234567890) == "89005924");
|
||
|
assert(totp.get_value_at_timestamp(2000000000) == "69279037");
|
||
|
assert(totp.get_value_at_timestamp(20000000000) == "65353130");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
void add_rfc_6238_sha256_test_vectors() {
|
||
|
Test.add_func("/otp/rfc6238/sha256", () => {
|
||
|
Otp.Totp totp = new Otp.Totp(RFC_6238_SHA256_KEY.data, 30, 8,
|
||
|
ChecksumType.SHA256);
|
||
|
|
||
|
assert(totp.get_value_at_timestamp(59) == "46119246");
|
||
|
assert(totp.get_value_at_timestamp(1111111109) == "68084774");
|
||
|
assert(totp.get_value_at_timestamp(1111111111) == "67062674");
|
||
|
assert(totp.get_value_at_timestamp(1234567890) == "91819424");
|
||
|
assert(totp.get_value_at_timestamp(2000000000) == "90698825");
|
||
|
assert(totp.get_value_at_timestamp(20000000000) == "77737706");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
void add_rfc_6238_sha512_test_vectors() {
|
||
|
Test.add_func("/otp/rfc6238/sha512", () => {
|
||
|
Otp.Totp totp = new Otp.Totp(RFC_6238_SHA512_KEY.data, 30, 8,
|
||
|
ChecksumType.SHA512);
|
||
|
|
||
|
assert(totp.get_value_at_timestamp(59) == "90693936");
|
||
|
assert(totp.get_value_at_timestamp(1111111109) == "25091201");
|
||
|
assert(totp.get_value_at_timestamp(1111111111) == "99943326");
|
||
|
assert(totp.get_value_at_timestamp(1234567890) == "93441116");
|
||
|
assert(totp.get_value_at_timestamp(2000000000) == "38618901");
|
||
|
assert(totp.get_value_at_timestamp(20000000000) == "47863826");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
void main(string[] args) {
|
||
|
Test.init(ref args);
|
||
|
add_rfc_4226_test_vectors();
|
||
|
add_rfc_6238_sha1_test_vectors();
|
||
|
add_rfc_6238_sha256_test_vectors();
|
||
|
add_rfc_6238_sha512_test_vectors();
|
||
|
Test.run();
|
||
|
}
|