115 lines
2.8 KiB
Python
115 lines
2.8 KiB
Python
# Copyright (c) (2015,2019) Apple Inc. All rights reserved.
|
||
#
|
||
# corecrypto is licensed under Apple Inc.’s Internal Use License Agreement (which
|
||
# is contained in the License.txt file distributed with corecrypto) and only to
|
||
# people who accept that license. IMPORTANT: Any license rights granted to you by
|
||
# Apple Inc. (if any) are limited to internal use within your organization only on
|
||
# devices and computers you own or control, for the sole purpose of verifying the
|
||
# security characteristics and correct functioning of the Apple Software. You may
|
||
# not, directly or indirectly, redistribute the Apple Software or any portions thereof.
|
||
from aetypes import Enum
|
||
|
||
|
||
sRSAmodulus = "n = "
|
||
sP = "p = "
|
||
sQ = "q = "
|
||
sResult = "Result"
|
||
sDi = "SHAAlg"
|
||
#number
|
||
ntags = [(sRSAmodulus, "\t\t.mod"),
|
||
(sP, "\t\t//.p"),
|
||
(sQ, "\t\t//.q"),
|
||
("e = ", "\t\t.exp"),
|
||
("d = ", "\t\t//.d"),
|
||
("Msg = ", "\t\t.msg"),
|
||
("S = ", "\t\t.sig"),
|
||
("SaltVal = ", "\t\t.salt"),
|
||
]
|
||
#strings
|
||
stags = [
|
||
(sDi, "\t\t.di"),
|
||
(sResult, "\t\t.valid")
|
||
]
|
||
|
||
class state(Enum):
|
||
read = 1
|
||
number = 2
|
||
string = 3
|
||
|
||
|
||
class data_state(Enum):
|
||
param_start = 1
|
||
ex_start = 2
|
||
param_end = 3
|
||
ex_end = 5
|
||
param = 6
|
||
example = 7
|
||
|
||
|
||
st = state.read
|
||
data_st = data_state.param_start
|
||
value = ""
|
||
curr_tag = ntags[0]
|
||
prev_tag = curr_tag
|
||
n_mod = 0
|
||
n_msg = 0
|
||
fin = open("SigVerPSS_186-3.rsp", "r")
|
||
fot = open("SigVerPSS_186-3.inc", "w")
|
||
|
||
for line in fin:
|
||
st = state.read
|
||
p = ""
|
||
value = ""
|
||
for tag in ntags:
|
||
if line.lower().startswith(tag[0].lower()):
|
||
curr_tag = tag
|
||
st = state.number
|
||
l = line.strip()
|
||
l = line.split('=', 1)[-1]
|
||
l = l.strip().upper()
|
||
value = "\\x" + '\\x'.join(a+b for a,b in zip(l[::2], l[1::2]))
|
||
#value = value + "\\x"+l.strip().replace(" ", "\\x")
|
||
a = curr_tag[1] + " = \"" + value + "\""
|
||
b = curr_tag[1] + "_nbytes = " + str(len(value)/4)
|
||
p = b + ",\n" + a
|
||
|
||
for tag in stags:
|
||
if line.lower().startswith(tag[0].lower()):
|
||
curr_tag = tag
|
||
st = state.string
|
||
l = line.strip()
|
||
value = l.split('=', 1)[-1]
|
||
comment = value.split('(', 1)
|
||
if (len(comment)>1): p = p + curr_tag[1] + " =" + comment[0] + "/*(" + comment[1] + "*/"
|
||
else: p = p + curr_tag[1] + " =" + value
|
||
|
||
if st != state.read:
|
||
|
||
if curr_tag[0] == sRSAmodulus:
|
||
n_mod+=1
|
||
lastMod = p
|
||
continue
|
||
elif curr_tag[0] == sP:
|
||
lastP = p
|
||
continue
|
||
elif curr_tag[0] == sQ:
|
||
lastQ = p
|
||
continue
|
||
elif curr_tag[0] == sDi:
|
||
if (n_msg>0): p = "},\n{ /* i = " + str(n_msg) + " */\n" + p
|
||
else: p = "{ /* i = 0 */\n" + p
|
||
p = p + ",\n" + lastMod + ",\n" + lastP + ",\n" + lastQ + ",\n"
|
||
n_msg +=1
|
||
else:
|
||
p = p + ",\n"
|
||
elif (line.strip()):
|
||
p = "// " + line
|
||
|
||
prev_tag = curr_tag
|
||
fot.write(p)
|
||
|
||
fot.write("}\n")
|
||
print "number of modulus = ", n_mod
|
||
fot.close()
|
||
fin.close()
|