之前進行ECC的簽名驗證,發現簽名的長度總是不同,查了不少資料才找到相應格式。
簽名格式爲TLV嵌套格式,簽名的主體分爲R和S兩部分。R(或S)的長度等於ECC私鑰長度。R(或S)前的T爲0x02,簽名T爲0x30。總體格式如下:
30 + LEN1 + 02 + LEN2 + 00 (optional) + r + 02 + LEN3 + 00(optional) + s
當r或s的第1字節大於0x80時,需要在r或s前加1字節0x00。
LEN3爲,0x00(optional) + s 的字節長度。
LEN2爲,0x00(optional) + r 的字節長度。
LEN1爲,LEN2+LEN3+4字節長度。
示例使用ECC密鑰的長度爲128bit,即16字節。
示例1:
R:
“55C963A8DF3E04D0065BD95AA97AE758F1A550683238978500ED8A77C0BBA438”
S:
“A7ED11F41861833CAC4FBD0CD6F2AF7E682512EA4135F66315F52D76E651CD2D”
Sign:
“3044”+ “0220” + “2025FB2BFE02547D366274D3EE5DB985FE278343D985D195A710D6D6C5F62770” + “0220” + “2ADA9ED4260F0686D098016ACC29369A55760222A071DE2E3A9A739EC0A1E4D4”
示例2:
R:
“55C963A8DF3E04D0065BD95AA97AE758F1A550683238978500ED8A77C0BBA438”
S:
“A7ED11F41861833CAC4FBD0CD6F2AF7E682512EA4135F66315F52D76E651CD2D”
Sign:
“3045” + “0220” + “55C963A8DF3E04D0065BD95AA97AE758F1A550683238978500ED8A77C0BBA438” + “0221” + “00” + “A7ED11F41861833CAC4FBD0CD6F2AF7E682512EA4135F66315F52D76E651CD2D”
示例3:
R:
“B66E81C0C6E0981CF24F4785A7DC853562D025EDB7407247FD7D29BDA4CFD9BF”
S:
“FA53841387568477283FF104952599582E24BB5EDA7B3318B8AC3661D63E29F3”
Sign:
“3046” + “0221” + “00” + “B66E81C0C6E0981CF24F4785A7DC853562D025EDB7407247FD7D29BDA4CFD9BF” + “0221” + “00” + “FA53841387568477283FF104952599582E24BB5EDA7B3318B8AC3661D63E29F3”