1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# -*- coding: utf-8 -*-
"""Tests for otp2289.OTPGenerator"""
import otp2289
def test_md5():
"""
Tests the MD5 functionality of the OTPGenerator as described in the RFC
Those are the tests from 'RFC-2289 Appendix C - OTP Verification Examples'
"""
# We could run this in a loop, but I guess "Readability counts."
# pass='This is a test.', seed='TeSt'
gen = otp2289.OTPGenerator('This is a test.'.encode(),
'TeSt',
otp2289.OTP_ALGO_MD5)
res_words = gen.generate_otp_words(0)
res_hex = gen.generate_otp_hexdigest(0)
assert isinstance(res_words, str)
assert isinstance(res_hex, str)
assert res_hex == '0x9e876134d90499dd'
assert res_words == 'INCH SEA ANNE LONG AHEM TOUR'
# step 1
assert gen.generate_otp_hexdigest(1) == '0x7965e05436f5029f'
assert gen.generate_otp_words(1) == 'EASE OIL FUM CURE AWRY AVIS'
# step 99
assert gen.generate_otp_hexdigest(99) == '0x50fe1962c4965880'
assert gen.generate_otp_words(99) == 'BAIL TUFT BITS GANG CHEF THY'
# iterator test
hexdigests = list(gen.hexdigest_range(105)) # testing the range itself
words = list(gen.words_range(99))
hexdigests.reverse()
words.reverse()
assert hexdigests[0] == '0x9e876134d90499dd'
assert hexdigests[1] == '0x7965e05436f5029f'
assert hexdigests[99] == '0x50fe1962c4965880'
assert words[0] == 'INCH SEA ANNE LONG AHEM TOUR'
assert words[1] == 'EASE OIL FUM CURE AWRY AVIS'
assert words[99] == 'BAIL TUFT BITS GANG CHEF THY'
# pass='AbCdEfGhIjK', seed='alpha1'
gen = otp2289.OTPGenerator('AbCdEfGhIjK'.encode(),
'alpha1',
otp2289.OTP_ALGO_MD5)
assert gen.generate_otp_hexdigest(0) == '0x87066dd9644bf206'
assert gen.generate_otp_words(0) == 'FULL PEW DOWN ONCE MORT ARC'
assert gen.generate_otp_hexdigest(1) == '0x7cd34c1040add14b'
assert gen.generate_otp_words(1) == 'FACT HOOF AT FIST SITE KENT'
assert gen.generate_otp_hexdigest(99) == '0x5aa37a81f212146c'
assert gen.generate_otp_words(99) == 'BODE HOP JAKE STOW JUT RAP'
# pass="OTP's are good", seed='correct'
gen = otp2289.OTPGenerator("OTP's are good".encode(),
'correct',
otp2289.OTP_ALGO_MD5)
assert gen.generate_otp_hexdigest(0) == '0xf205753943de4cf9'
assert gen.generate_otp_words(0) == 'ULAN NEW ARMY FUSE SUIT EYED'
assert gen.generate_otp_hexdigest(1) == '0xddcdac956f234937'
assert gen.generate_otp_words(1) == 'SKIM CULT LOB SLAM POE HOWL'
assert gen.generate_otp_hexdigest(99) == '0xb203e28fa525be47'
assert gen.generate_otp_words(99) == 'LONG IVY JULY AJAR BOND LEE'
def test_sha1():
"""
Tests the SHA-1 functionality of the OTPGenerator as described in the RFC
Those are the tests from 'RFC-2289 Appendix C - OTP Verification Examples'
"""
# pass='This is a test.', seed='TeSt'
gen = otp2289.OTPGenerator('This is a test.'.encode(),
'TeSt',
otp2289.OTP_ALGO_SHA1)
# step=0
res_hex = gen.generate_otp_hexdigest(0)
res_words = gen.generate_otp_words(0)
assert isinstance(res_words, str)
assert isinstance(res_hex, str)
assert res_hex == '0xbb9e6ae1979d8ff4'
assert res_words == 'MILT VARY MAST OK SEES WENT'
assert gen.generate_otp_hexdigest(1) == '0x63d936639734385b'
assert gen.generate_otp_words(1) == 'CART OTTO HIVE ODE VAT NUT'
assert gen.generate_otp_hexdigest(99) == '0x87fec7768b73ccf9'
assert gen.generate_otp_words(99) == 'GAFF WAIT SKID GIG SKY EYED'
# iterator test
hexdigests = list(gen.hexdigest_range(105))
words = list(gen.words_range(99))
hexdigests.reverse()
words.reverse()
assert hexdigests[0] == '0xbb9e6ae1979d8ff4'
assert hexdigests[1] == '0x63d936639734385b'
assert hexdigests[99] == '0x87fec7768b73ccf9'
assert words[0] == 'MILT VARY MAST OK SEES WENT'
assert words[1] == 'CART OTTO HIVE ODE VAT NUT'
assert words[99] == 'GAFF WAIT SKID GIG SKY EYED'
# pass='AbCdEfGhIjK', seed='alpha1'
gen = otp2289.OTPGenerator('AbCdEfGhIjK'.encode(),
'alpha1',
otp2289.OTP_ALGO_SHA1)
assert gen.generate_otp_hexdigest(0) == '0xad85f658ebe383c9'
assert gen.generate_otp_words(0) == 'LEST OR HEEL SCOT ROB SUIT'
assert gen.generate_otp_hexdigest(1) == '0xd07ce229b5cf119b'
assert gen.generate_otp_words(1) == 'RITE TAKE GELD COST TUNE RECK'
assert gen.generate_otp_hexdigest(99) == '0x27bc71035aaf3dc6'
assert gen.generate_otp_words(99) == 'MAY STAR TIN LYON VEDA STAN'
# pass="OTP's are good", seed='correct'
gen = otp2289.OTPGenerator("OTP's are good".encode(),
'correct',
otp2289.OTP_ALGO_SHA1)
assert gen.generate_otp_hexdigest(0) == '0xd51f3e99bf8e6f0b'
assert gen.generate_otp_words(0) == 'RUST WELT KICK FELL TAIL FRAU'
assert gen.generate_otp_hexdigest(1) == '0x82aeb52d943774e4'
assert gen.generate_otp_words(1) == 'FLIT DOSE ALSO MEW DRUM DEFY'
assert gen.generate_otp_hexdigest(99) == '0x4f296a74fe1567ec'
assert gen.generate_otp_words(99) == 'AURA ALOE HURL WING BERG WAIT'
|