Configure golangci-lint and fix warnings
This commit is contained in:
parent
ecd1846975
commit
2e467b3d2e
20 changed files with 915 additions and 559 deletions
|
@ -7,6 +7,7 @@ const signerTimeFormat = "010203042006.05"
|
|||
func Encode24BitLength(data []byte) []byte {
|
||||
lengthBytes := make([]byte, 4)
|
||||
binary.BigEndian.PutUint32(lengthBytes, uint32(len(data)))
|
||||
|
||||
return lengthBytes[1:]
|
||||
}
|
||||
|
||||
|
@ -17,10 +18,12 @@ func Decode24BitLength(bytes []byte) int {
|
|||
|
||||
func CalculateXorCheckSum(byteBlocks [][]byte) byte {
|
||||
var result byte = 0x0
|
||||
|
||||
for _, byteBlock := range byteBlocks {
|
||||
for _, b := range byteBlock {
|
||||
result ^= b
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
|
|
@ -9,13 +9,21 @@ import (
|
|||
"git.cacert.org/cacert-gosigner/shared"
|
||||
)
|
||||
|
||||
const (
|
||||
headerPosSystem = 2
|
||||
headerPosRoot = 3
|
||||
headerPosProfile = 4
|
||||
headerPosSignatureAlgorithm = 5
|
||||
headerPosDay = 6
|
||||
)
|
||||
|
||||
type SignerRequest struct {
|
||||
Version uint8
|
||||
Action shared.Action
|
||||
System shared.CryptoSystemId
|
||||
Root shared.CryptoSystemRootId
|
||||
Profile shared.CertificateProfileId
|
||||
MdAlgorithm shared.MessageDigestAlgorithmId
|
||||
System shared.CryptoSystemID
|
||||
Root shared.CryptoSystemRootID
|
||||
Profile shared.CertificateProfileID
|
||||
MdAlgorithm shared.SignatureAlgorithmID
|
||||
Days uint16
|
||||
Spkac uint8
|
||||
Content1 []byte
|
||||
|
@ -24,33 +32,33 @@ type SignerRequest struct {
|
|||
}
|
||||
|
||||
func SignerRequestFromData(blockData []byte) (*SignerRequest, error) {
|
||||
headerLength := Decode24BitLength(blockData[0:3])
|
||||
headerBytes := blockData[3 : 3+headerLength]
|
||||
headerLength := Decode24BitLength(blockData[0:shared.LengthFieldSize])
|
||||
headerBytes := blockData[shared.LengthFieldSize : shared.LengthFieldSize+headerLength]
|
||||
|
||||
contentBytes := blockData[3+headerLength:]
|
||||
content1Length := Decode24BitLength(contentBytes[0:3])
|
||||
content1 := contentBytes[3 : 3+content1Length]
|
||||
contentBytes := blockData[shared.LengthFieldSize+headerLength:]
|
||||
contentLen := Decode24BitLength(contentBytes[0:shared.LengthFieldSize])
|
||||
content := contentBytes[shared.LengthFieldSize : shared.LengthFieldSize+contentLen]
|
||||
|
||||
content2Offset := 3 + content1Length
|
||||
content2Length := Decode24BitLength(contentBytes[content2Offset : content2Offset+3])
|
||||
content2 := contentBytes[3+content2Offset : 3+content2Offset+content2Length]
|
||||
argument1Offset := shared.LengthFieldSize + contentLen
|
||||
argument1Len := Decode24BitLength(contentBytes[argument1Offset : argument1Offset+shared.LengthFieldSize])
|
||||
argument1 := contentBytes[shared.LengthFieldSize+argument1Offset : shared.LengthFieldSize+argument1Offset+argument1Len]
|
||||
|
||||
content3Offset := 3 + content2Offset + content2Length
|
||||
content3Length := Decode24BitLength(contentBytes[content3Offset : content3Offset+3])
|
||||
content3 := contentBytes[3+content3Offset : 3+content3Offset+content3Length]
|
||||
argument2Offset := shared.LengthFieldSize + argument1Offset + argument1Len
|
||||
argument2Len := Decode24BitLength(contentBytes[argument2Offset : argument2Offset+shared.LengthFieldSize])
|
||||
argument2 := contentBytes[shared.LengthFieldSize+argument2Offset : shared.LengthFieldSize+argument2Offset+argument2Len]
|
||||
|
||||
return &SignerRequest{
|
||||
Version: headerBytes[0],
|
||||
Action: shared.Action(headerBytes[1]),
|
||||
System: shared.CryptoSystemId(headerBytes[2]),
|
||||
Root: shared.CryptoSystemRootId(headerBytes[3]),
|
||||
Profile: shared.CertificateProfileId(headerBytes[4]),
|
||||
MdAlgorithm: shared.MessageDigestAlgorithmId(headerBytes[5]),
|
||||
Days: binary.BigEndian.Uint16([]byte{headerBytes[6], headerBytes[7]}),
|
||||
Version: headerBytes[headerPosVersion],
|
||||
Action: shared.Action(headerBytes[headerPosAction]),
|
||||
System: shared.CryptoSystemID(headerBytes[headerPosSystem]),
|
||||
Root: shared.CryptoSystemRootID(headerBytes[headerPosRoot]),
|
||||
Profile: shared.CertificateProfileID(headerBytes[headerPosProfile]),
|
||||
MdAlgorithm: shared.SignatureAlgorithmID(headerBytes[headerPosSignatureAlgorithm]),
|
||||
Days: binary.BigEndian.Uint16(headerBytes[headerPosDay : headerPosDay+1]),
|
||||
Spkac: headerBytes[8],
|
||||
Content1: content1,
|
||||
Content2: content2,
|
||||
Content3: content3,
|
||||
Content1: content,
|
||||
Content2: argument1,
|
||||
Content3: argument2,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -76,6 +84,7 @@ func (r *SignerRequest) Serialize() []byte {
|
|||
Encode24BitLength(content2Bytes), content2Bytes,
|
||||
Encode24BitLength(content3Bytes), content3Bytes,
|
||||
}, []byte{})
|
||||
|
||||
return bytes.Join([][]byte{Encode24BitLength(blockBytes), blockBytes}, []byte{})
|
||||
}
|
||||
|
||||
|
@ -97,9 +106,11 @@ func (r *SignerRequest) String() string {
|
|||
}
|
||||
|
||||
func shorten(original []byte) []byte {
|
||||
if len(original) > 20 {
|
||||
return original[:20]
|
||||
const maxLength = 20
|
||||
if len(original) > maxLength {
|
||||
return original[:maxLength]
|
||||
}
|
||||
|
||||
return original
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,16 @@ import (
|
|||
"git.cacert.org/cacert-gosigner/shared"
|
||||
)
|
||||
|
||||
const (
|
||||
headerPosVersion = 0
|
||||
headerPosAction = 1
|
||||
headerPosReserved1 = 2
|
||||
headerPosReserved2 = 3
|
||||
blockPosContent = 0
|
||||
blockPosArgument1 = 1
|
||||
blockPosArgument2 = 2
|
||||
)
|
||||
|
||||
type SignerResponse struct {
|
||||
Version uint8
|
||||
Action shared.Action
|
||||
|
@ -19,23 +29,25 @@ type SignerResponse struct {
|
|||
}
|
||||
|
||||
func SignerResponseFromData(lengthBytes []byte, blockData []byte, checkSum byte) (*SignerResponse, error) {
|
||||
if len(blockData) < 3 {
|
||||
if len(blockData) < shared.LengthFieldSize {
|
||||
return nil, errors.New("begin of structure corrupt")
|
||||
}
|
||||
|
||||
offset := 0
|
||||
headerLength := Decode24BitLength(blockData[offset : offset+3])
|
||||
offset += 3
|
||||
headerLength := Decode24BitLength(blockData[offset : offset+shared.LengthFieldSize])
|
||||
offset += shared.LengthFieldSize
|
||||
headerBytes := blockData[offset : offset+headerLength]
|
||||
offset += headerLength
|
||||
|
||||
content := make([][]byte, 3)
|
||||
content := make([][]byte, 0)
|
||||
|
||||
for offset < len(blockData) {
|
||||
dataLength := Decode24BitLength(blockData[offset : offset+3])
|
||||
if len(blockData)-3 < dataLength {
|
||||
if len(blockData)-shared.LengthFieldSize < dataLength {
|
||||
return nil, errors.New("structure cut off")
|
||||
}
|
||||
offset += 3
|
||||
|
||||
offset += shared.LengthFieldSize
|
||||
content = append(content, blockData[offset:offset+dataLength])
|
||||
offset += dataLength
|
||||
}
|
||||
|
@ -46,13 +58,13 @@ func SignerResponseFromData(lengthBytes []byte, blockData []byte, checkSum byte)
|
|||
}
|
||||
|
||||
return &SignerResponse{
|
||||
Version: headerBytes[0],
|
||||
Action: shared.Action(headerBytes[1]),
|
||||
Reserved1: headerBytes[2],
|
||||
Reserved2: headerBytes[3],
|
||||
Content: content[0],
|
||||
Argument1: content[1],
|
||||
Argument2: content[2],
|
||||
Version: headerBytes[headerPosVersion],
|
||||
Action: shared.Action(headerBytes[headerPosAction]),
|
||||
Reserved1: headerBytes[headerPosReserved1],
|
||||
Reserved2: headerBytes[headerPosReserved2],
|
||||
Content: content[blockPosContent],
|
||||
Argument1: content[blockPosArgument1],
|
||||
Argument2: content[blockPosArgument2],
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -64,6 +76,7 @@ func (r SignerResponse) Serialize() []byte {
|
|||
Encode24BitLength(r.Argument1), r.Argument1,
|
||||
Encode24BitLength(r.Argument2), r.Argument2,
|
||||
}, []byte{})
|
||||
|
||||
return bytes.Join([][]byte{Encode24BitLength(blockBytes), blockBytes}, []byte{})
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue