From b0b3820d29780d70e37c651e18e5ba86f71cdd1c Mon Sep 17 00:00:00 2001 From: "Arrobo, Gabriel" Date: Mon, 10 Jun 2024 20:14:41 -0700 Subject: [PATCH 1/6] Enable several linters --- .golangci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 38183c2..577d733 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -229,9 +229,14 @@ linters: # - gomnd #- maligned #- nestif - #- goconst + - goconst #- gocognit - nakedret + - misspell + - noctx + - dogsled + - asciicheck + #disable-all: false fast: true issues: From 4f22fdc74a67ee50eeba76e0883ed9f9b870b925 Mon Sep 17 00:00:00 2001 From: "Arrobo, Gabriel" Date: Mon, 10 Jun 2024 20:18:05 -0700 Subject: [PATCH 2/6] Apply `gci` to files --- .golangci.yml | 1 + logger/logger.go | 3 +-- security/counter_test.go | 1 - security/security.go | 3 +-- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 577d733..220a70f 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -232,6 +232,7 @@ linters: - goconst #- gocognit - nakedret + - gci - misspell - noctx - dogsled diff --git a/logger/logger.go b/logger/logger.go index fbb269a..ae432ef 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -9,10 +9,9 @@ import ( "os" "time" + formatter "github.com/antonfisher/nested-logrus-formatter" "github.com/omec-project/util/logger" "github.com/omec-project/util/logger_conf" - - formatter "github.com/antonfisher/nested-logrus-formatter" "github.com/sirupsen/logrus" ) diff --git a/security/counter_test.go b/security/counter_test.go index f8540ec..5ef29e1 100644 --- a/security/counter_test.go +++ b/security/counter_test.go @@ -9,7 +9,6 @@ import ( "testing" "github.com/omec-project/nas/security" - "github.com/stretchr/testify/assert" ) diff --git a/security/security.go b/security/security.go index 515f01b..452a2f4 100644 --- a/security/security.go +++ b/security/security.go @@ -11,10 +11,9 @@ import ( "encoding/binary" "fmt" + "github.com/aead/cmac" "github.com/omec-project/nas/logger" "github.com/omec-project/nas/security/snow3g" - - "github.com/aead/cmac" ) func NASEncrypt(AlgoID uint8, KnasEnc [16]byte, Count uint32, Bearer uint8, From d905e4fedb654729d0f1b3be997b2f0902642077 Mon Sep 17 00:00:00 2001 From: "Arrobo, Gabriel" Date: Mon, 10 Jun 2024 20:22:43 -0700 Subject: [PATCH 3/6] Apply `gofumpt` to files --- .golangci.yml | 1 + logger/logger.go | 16 ++-- nas.go | 92 +++++++++++----------- nasConvert/AmfId.go | 2 - nasConvert/GPRSTimer2.go | 1 - nasConvert/GPRSTimer3.go | 1 - nasConvert/Ladn.go | 2 - nasConvert/MobileIdentity5GS.go | 9 +-- nasConvert/NetWorkName.go | 2 - nasConvert/Nssai.go | 1 - nasConvert/Nssai_test.go | 1 - nasConvert/PlmnId.go | 1 - nasConvert/ProtocolConfigurationOptions.go | 11 +-- nasConvert/SessionAMBR.go | 1 - nasConvert/SpareHalfOctetAndNgKsi.go | 2 - nasConvert/Time.go | 4 +- nasTestpacket/NasPdu.go | 51 ++++-------- security/counter_test.go | 1 - security/security.go | 25 +++--- security/snow3g/snow3g.go | 6 +- security/snow3g/snow3g_test.go | 8 +- 21 files changed, 98 insertions(+), 140 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 220a70f..25edc16 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -234,6 +234,7 @@ linters: - nakedret - gci - misspell + - gofumpt - noctx - dogsled - asciicheck diff --git a/logger/logger.go b/logger/logger.go index ae432ef..ffc19bd 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -15,11 +15,13 @@ import ( "github.com/sirupsen/logrus" ) -var log *logrus.Logger -var NasLog *logrus.Entry -var NasMsgLog *logrus.Entry -var ConvertLog *logrus.Entry -var SecurityLog *logrus.Entry +var ( + log *logrus.Logger + NasLog *logrus.Entry + NasMsgLog *logrus.Entry + ConvertLog *logrus.Entry + SecurityLog *logrus.Entry +) func init() { log = logrus.New() @@ -33,12 +35,12 @@ func init() { FieldsOrder: []string{"component", "category"}, } - free5gcLogHook, err := logger.NewFileHook(logger_conf.Free5gcLogFile, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) + free5gcLogHook, err := logger.NewFileHook(logger_conf.Free5gcLogFile, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0o666) if err == nil { log.Hooks.Add(free5gcLogHook) } - selfLogHook, err := logger.NewFileHook(logger_conf.LibLogDir+"nas.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) + selfLogHook, err := logger.NewFileHook(logger_conf.LibLogDir+"nas.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0o666) if err == nil { log.Hooks.Add(selfLogHook) } diff --git a/nas.go b/nas.go index 3943b1a..db158ab 100644 --- a/nas.go +++ b/nas.go @@ -113,35 +113,35 @@ func GetSecurityHeaderType(byteArray []byte) uint8 { type GmmMessage struct { GmmHeader - *nasMessage.AuthenticationRequest //8.2.1 - *nasMessage.AuthenticationResponse //8.2.2 - *nasMessage.AuthenticationResult //8.2.3 - *nasMessage.AuthenticationFailure //8.2.4 - *nasMessage.AuthenticationReject //8.2.5 - *nasMessage.RegistrationRequest //8.2.6 - *nasMessage.RegistrationAccept //8.2.7 - *nasMessage.RegistrationComplete //8.2.8 - *nasMessage.RegistrationReject //8.2.9 - *nasMessage.ULNASTransport //8.2.10 - *nasMessage.DLNASTransport //8.2.11 - *nasMessage.DeregistrationRequestUEOriginatingDeregistration //8.2.12 - *nasMessage.DeregistrationAcceptUEOriginatingDeregistration //8.2.13 - *nasMessage.DeregistrationRequestUETerminatedDeregistration //8.2.14 - *nasMessage.DeregistrationAcceptUETerminatedDeregistration //8.2.15 - *nasMessage.ServiceRequest //8.2.16 - *nasMessage.ServiceAccept //8.2.17 - *nasMessage.ServiceReject //8.2.18 - *nasMessage.ConfigurationUpdateCommand //8.2.19 - *nasMessage.ConfigurationUpdateComplete //8.2.20 - *nasMessage.IdentityRequest //8.2.21 - *nasMessage.IdentityResponse //8.2.22 - *nasMessage.Notification //8.2.23 - *nasMessage.NotificationResponse //8.2.24 - *nasMessage.SecurityModeCommand //8.2.25 - *nasMessage.SecurityModeComplete //8.2.26 - *nasMessage.SecurityModeReject //8.2.27 - *nasMessage.SecurityProtected5GSNASMessage //8.2.28 - *nasMessage.Status5GMM //8.2.29 + *nasMessage.AuthenticationRequest // 8.2.1 + *nasMessage.AuthenticationResponse // 8.2.2 + *nasMessage.AuthenticationResult // 8.2.3 + *nasMessage.AuthenticationFailure // 8.2.4 + *nasMessage.AuthenticationReject // 8.2.5 + *nasMessage.RegistrationRequest // 8.2.6 + *nasMessage.RegistrationAccept // 8.2.7 + *nasMessage.RegistrationComplete // 8.2.8 + *nasMessage.RegistrationReject // 8.2.9 + *nasMessage.ULNASTransport // 8.2.10 + *nasMessage.DLNASTransport // 8.2.11 + *nasMessage.DeregistrationRequestUEOriginatingDeregistration // 8.2.12 + *nasMessage.DeregistrationAcceptUEOriginatingDeregistration // 8.2.13 + *nasMessage.DeregistrationRequestUETerminatedDeregistration // 8.2.14 + *nasMessage.DeregistrationAcceptUETerminatedDeregistration // 8.2.15 + *nasMessage.ServiceRequest // 8.2.16 + *nasMessage.ServiceAccept // 8.2.17 + *nasMessage.ServiceReject // 8.2.18 + *nasMessage.ConfigurationUpdateCommand // 8.2.19 + *nasMessage.ConfigurationUpdateComplete // 8.2.20 + *nasMessage.IdentityRequest // 8.2.21 + *nasMessage.IdentityResponse // 8.2.22 + *nasMessage.Notification // 8.2.23 + *nasMessage.NotificationResponse // 8.2.24 + *nasMessage.SecurityModeCommand // 8.2.25 + *nasMessage.SecurityModeComplete // 8.2.26 + *nasMessage.SecurityModeReject // 8.2.27 + *nasMessage.SecurityProtected5GSNASMessage // 8.2.28 + *nasMessage.Status5GMM // 8.2.29 } const ( @@ -185,6 +185,7 @@ func (a *Message) PlainNasDecode(byteArray *[]byte) error { } return fmt.Errorf("Extended Protocol Discriminator[%d] is not allowed in Nas Message Deocde", epd) } + func (a *Message) PlainNasEncode() ([]byte, error) { data := new(bytes.Buffer) if a.GmmMessage != nil { @@ -195,7 +196,6 @@ func (a *Message) PlainNasEncode() ([]byte, error) { return data.Bytes(), err } return nil, fmt.Errorf("Gmm/Gsm Message are both empty in Nas Message Encode") - } func (a *Message) GmmMessageDecode(byteArray *[]byte) error { @@ -359,22 +359,22 @@ func (a *Message) GmmMessageEncode(buffer *bytes.Buffer) error { type GsmMessage struct { GsmHeader - *nasMessage.PDUSessionEstablishmentRequest //8.3.1 - *nasMessage.PDUSessionEstablishmentAccept //8.3.2 - *nasMessage.PDUSessionEstablishmentReject //8.3.3 - *nasMessage.PDUSessionAuthenticationCommand //8.3.4 - *nasMessage.PDUSessionAuthenticationComplete //8.3.5 - *nasMessage.PDUSessionAuthenticationResult //8.3.6 - *nasMessage.PDUSessionModificationRequest //8.3.7 - *nasMessage.PDUSessionModificationReject //8.3.8 - *nasMessage.PDUSessionModificationCommand //8.3.9 - *nasMessage.PDUSessionModificationComplete //8.3.10 - *nasMessage.PDUSessionModificationCommandReject //8.3.11 - *nasMessage.PDUSessionReleaseRequest //8.3.12 - *nasMessage.PDUSessionReleaseReject //8.3.13 - *nasMessage.PDUSessionReleaseCommand //8.3.14 - *nasMessage.PDUSessionReleaseComplete //8.3.15 - *nasMessage.Status5GSM //8.3.16 + *nasMessage.PDUSessionEstablishmentRequest // 8.3.1 + *nasMessage.PDUSessionEstablishmentAccept // 8.3.2 + *nasMessage.PDUSessionEstablishmentReject // 8.3.3 + *nasMessage.PDUSessionAuthenticationCommand // 8.3.4 + *nasMessage.PDUSessionAuthenticationComplete // 8.3.5 + *nasMessage.PDUSessionAuthenticationResult // 8.3.6 + *nasMessage.PDUSessionModificationRequest // 8.3.7 + *nasMessage.PDUSessionModificationReject // 8.3.8 + *nasMessage.PDUSessionModificationCommand // 8.3.9 + *nasMessage.PDUSessionModificationComplete // 8.3.10 + *nasMessage.PDUSessionModificationCommandReject // 8.3.11 + *nasMessage.PDUSessionReleaseRequest // 8.3.12 + *nasMessage.PDUSessionReleaseReject // 8.3.13 + *nasMessage.PDUSessionReleaseCommand // 8.3.14 + *nasMessage.PDUSessionReleaseComplete // 8.3.15 + *nasMessage.Status5GSM // 8.3.16 } const ( diff --git a/nasConvert/AmfId.go b/nasConvert/AmfId.go index 9e24b5d..21bcc8e 100644 --- a/nasConvert/AmfId.go +++ b/nasConvert/AmfId.go @@ -11,7 +11,6 @@ import ( ) func AmfIdToNas(amfId string) (amfRegionId uint8, amfSetId uint16, amfPointer uint8) { - amfIdBytes, err := hex.DecodeString(amfId) if err != nil { log.Printf("amfId decode failed: %+v", err) @@ -24,7 +23,6 @@ func AmfIdToNas(amfId string) (amfRegionId uint8, amfSetId uint16, amfPointer ui } func AmfIdToModels(amfRegionId uint8, amfSetId uint16, amfPointer uint8) (amfId string) { - tmpBytes := []uint8{amfRegionId, uint8(amfSetId>>2) & 0xff, uint8(amfSetId&0x03) + amfPointer&0x3f} amfId = hex.EncodeToString(tmpBytes) return diff --git a/nasConvert/GPRSTimer2.go b/nasConvert/GPRSTimer2.go index c0796aa..844bff6 100644 --- a/nasConvert/GPRSTimer2.go +++ b/nasConvert/GPRSTimer2.go @@ -12,7 +12,6 @@ import ( // TS 24.008 10.5.7.4, TS 24.501 9.11.2.4 // the unit of timerValue is second func GPRSTimer2ToNas(timerValue int) (timerValueNas uint8) { - timerValueNas = 0 if timerValue <= 64 { diff --git a/nasConvert/GPRSTimer3.go b/nasConvert/GPRSTimer3.go index d2ac8b0..b81c201 100644 --- a/nasConvert/GPRSTimer3.go +++ b/nasConvert/GPRSTimer3.go @@ -11,7 +11,6 @@ import ( // TS 24.008 10.5.7.4a func GPRSTimer3ToNas(timerValue int) (timerValueNas uint8) { - if timerValue <= 2*31 { t := uint8(timerValue / 2) timerValueNas = (nasMessage.GPRSTimer3UnitMultiplesOf2Seconds << 5) + t diff --git a/nasConvert/Ladn.go b/nasConvert/Ladn.go index b912581..c0c030d 100644 --- a/nasConvert/Ladn.go +++ b/nasConvert/Ladn.go @@ -10,7 +10,6 @@ import ( ) func LadnToModels(buf []uint8) (dnnValues []string) { - for bufOffset := 1; bufOffset < len(buf); { lenOfDnn := int(buf[bufOffset]) dnn := string(buf[bufOffset : bufOffset+lenOfDnn]) @@ -22,7 +21,6 @@ func LadnToModels(buf []uint8) (dnnValues []string) { } func LadnToNas(dnn string, taiLists []models.Tai) (ladnNas []uint8) { - dnnNas := []byte(dnn) ladnNas = append(ladnNas, uint8(len(dnnNas))) diff --git a/nasConvert/MobileIdentity5GS.go b/nasConvert/MobileIdentity5GS.go index 6ca2b6d..58882e6 100644 --- a/nasConvert/MobileIdentity5GS.go +++ b/nasConvert/MobileIdentity5GS.go @@ -27,7 +27,6 @@ func GetTypeOfIdentity(buf byte) uint8 { // "suci-0-${mcc}-${mnc}-${routingIndentifier}-${protectionScheme}-${homeNetworkPublicKeyIdentifier}-${schemeOutput}" // suci(nai) = "nai-${naiString}" func SuciToString(buf []byte) (suci string, plmnId string) { - var mcc, mnc, routingInd, protectionScheme, homeNetworkPublicKeyIdentifier, schemeOutput string supiFormat := (buf[0] & 0xf0) >> 4 @@ -85,8 +84,10 @@ func SuciToString(buf []byte) (suci string, plmnId string) { schemeOutput = hex.EncodeToString(buf[8:]) } - suci = strings.Join([]string{"suci", "0", mcc, mnc, routingInd, protectionScheme, homeNetworkPublicKeyIdentifier, - schemeOutput}, "-") + suci = strings.Join([]string{ + "suci", "0", mcc, mnc, routingInd, protectionScheme, homeNetworkPublicKeyIdentifier, + schemeOutput, + }, "-") return suci, plmnId } @@ -100,7 +101,6 @@ func NaiToString(buf []byte) (nai string) { // nasType: TS 24.501 9.11.3.4 func GutiToString(buf []byte) (guami models.Guami, guti string) { - plmnID := PlmnIDToString(buf[1:4]) amfID := hex.EncodeToString(buf[4:7]) tmsi5G := hex.EncodeToString(buf[7:]) @@ -183,7 +183,6 @@ func GutiToNas(guti string) nasType.GUTI5G { // PEI: ^(imei-[0-9]{15}|imeisv-[0-9]{16}|.+)$ func PeiToString(buf []byte) string { - var prefix string typeOfIdentity := buf[0] & 0x07 diff --git a/nasConvert/NetWorkName.go b/nasConvert/NetWorkName.go index 2169841..f4f88ec 100644 --- a/nasConvert/NetWorkName.go +++ b/nasConvert/NetWorkName.go @@ -11,7 +11,6 @@ import ( // TS 24.501 9.11.3.35, TS 24.008 10.5.3.5a func FullNetworkNameToNas(name string) (fullNetworkName nasType.FullNameForNetwork) { - asciiArray := []byte(name) numOfSpareBits := 8 - ((7 * len(asciiArray)) % 8) @@ -41,7 +40,6 @@ func FullNetworkNameToNas(name string) (fullNetworkName nasType.FullNameForNetwo } func ShortNetworkNameToNas(name string) (shortNetworkName nasType.ShortNameForNetwork) { - asciiArray := []byte(name) numOfSpareBits := 8 - ((7 * len(asciiArray)) % 8) diff --git a/nasConvert/Nssai.go b/nasConvert/Nssai.go index 9b239d4..72f13e3 100644 --- a/nasConvert/Nssai.go +++ b/nasConvert/Nssai.go @@ -37,7 +37,6 @@ func RequestedNssaiToModels(nasNssai *nasType.RequestedNSSAI) ([]models.MappingO // TS 24.501 9.11.2.8, Length & value part of S-NSSAI IE func snssaiToModels(lengthOfSnssaiContents uint8, buf []byte) (models.MappingOfSnssai, error) { - snssai := models.MappingOfSnssai{} switch lengthOfSnssaiContents { diff --git a/nasConvert/Nssai_test.go b/nasConvert/Nssai_test.go index 4264c2e..b6d920c 100644 --- a/nasConvert/Nssai_test.go +++ b/nasConvert/Nssai_test.go @@ -16,7 +16,6 @@ import ( ) func TestRequestedNssaiToModels(t *testing.T) { - testCases := []struct { name string requestNssai nasType.RequestedNSSAI diff --git a/nasConvert/PlmnId.go b/nasConvert/PlmnId.go index d76bbc5..cb76fbe 100644 --- a/nasConvert/PlmnId.go +++ b/nasConvert/PlmnId.go @@ -63,7 +63,6 @@ func PlmnIDToNas(plmnID models.PlmnId) []uint8 { } func PlmnIDToString(nasBuf []byte) string { - mccDigit1 := nasBuf[0] & 0x0f mccDigit2 := (nasBuf[0] & 0xf0) >> 4 mccDigit3 := (nasBuf[1] & 0x0f) diff --git a/nasConvert/ProtocolConfigurationOptions.go b/nasConvert/ProtocolConfigurationOptions.go index f09d358..a92a73c 100644 --- a/nasConvert/ProtocolConfigurationOptions.go +++ b/nasConvert/ProtocolConfigurationOptions.go @@ -44,7 +44,6 @@ func NewProtocolOrContainerUnit() (pcu *ProtocolOrContainerUnit) { } func NewProtocolConfigurationOptions() (pco *ProtocolConfigurationOptions) { - pco = &ProtocolConfigurationOptions{ ProtocolOrContainerList: make([]*ProtocolOrContainerUnit, 0), } @@ -53,7 +52,6 @@ func NewProtocolConfigurationOptions() (pco *ProtocolConfigurationOptions) { } func (protocolConfigurationOptions *ProtocolConfigurationOptions) Marshal() []byte { - var metaInfo uint8 var extension uint8 = 1 var spare uint8 = 0 @@ -96,7 +94,6 @@ func (protocolConfigurationOptions *ProtocolConfigurationOptions) UnMarshal(data var curContainer *ProtocolOrContainerUnit for numOfBytes > 0 { - switch readingState { case ReadingID: curContainer = NewProtocolOrContainerUnit() @@ -170,7 +167,6 @@ func (protocolConfigurationOptions *ProtocolConfigurationOptions) AddIPAddressAl } func (protocolConfigurationOptions *ProtocolConfigurationOptions) AddDNSServerIPv4Address(dnsIP net.IP) (err error) { - if dnsIP.To4() == nil { err = fmt.Errorf("The DNS IP should be IPv4 in AddDNSServerIPv4Address!") return @@ -222,7 +218,6 @@ func (protocolConfigurationOptions *ProtocolConfigurationOptions) AddPCSCFIPv4Ad } func (protocolConfigurationOptions *ProtocolConfigurationOptions) AddDNSServerIPv6Address(dnsIP net.IP) (err error) { - if dnsIP.To16() == nil { err = fmt.Errorf("The DNS IP should be IPv6 in AddDNSServerIPv6Address!") return @@ -251,11 +246,9 @@ func (protocolConfigurationOptions *ProtocolConfigurationOptions) AddIPv4LinkMTU protocolOrContainerUnit.ProtocolOrContainerID = nasMessage.IPv4LinkMTUDL protocolOrContainerUnit.LengthOfContents = 2 logger.ConvertLog.Traceln("LengthOfContents: ", protocolOrContainerUnit.LengthOfContents) - protocolOrContainerUnit.Contents = - append(protocolOrContainerUnit.Contents, []byte{uint8(mtu >> 8), uint8(mtu & 0xff)}...) + protocolOrContainerUnit.Contents = append(protocolOrContainerUnit.Contents, []byte{uint8(mtu >> 8), uint8(mtu & 0xff)}...) logger.ConvertLog.Traceln("Contents: ", protocolOrContainerUnit.Contents) - protocolConfigurationOptions.ProtocolOrContainerList = - append(protocolConfigurationOptions.ProtocolOrContainerList, protocolOrContainerUnit) + protocolConfigurationOptions.ProtocolOrContainerList = append(protocolConfigurationOptions.ProtocolOrContainerList, protocolOrContainerUnit) return } diff --git a/nasConvert/SessionAMBR.go b/nasConvert/SessionAMBR.go index d24dc55..fa71e81 100644 --- a/nasConvert/SessionAMBR.go +++ b/nasConvert/SessionAMBR.go @@ -18,7 +18,6 @@ import ( ) func ModelsToSessionAMBR(ambr *models.Ambr) (sessAmbr nasType.SessionAMBR) { - fmt.Println(ambr) uplink := strings.Split(ambr.Uplink, " ") diff --git a/nasConvert/SpareHalfOctetAndNgKsi.go b/nasConvert/SpareHalfOctetAndNgKsi.go index 1578f75..d11dc17 100644 --- a/nasConvert/SpareHalfOctetAndNgKsi.go +++ b/nasConvert/SpareHalfOctetAndNgKsi.go @@ -12,7 +12,6 @@ import ( ) func SpareHalfOctetAndNgksiToModels(ngKsiNas nasType.SpareHalfOctetAndNgksi) (ngKsiModels models.NgKsi) { - switch ngKsiNas.GetTSC() { case nasMessage.TypeOfSecurityContextFlagNative: ngKsiModels.Tsc = models.ScType_NATIVE @@ -25,7 +24,6 @@ func SpareHalfOctetAndNgksiToModels(ngKsiNas nasType.SpareHalfOctetAndNgksi) (ng } func SpareHalfOctetAndNgksiToNas(ngKsiModels models.NgKsi) (ngKsiNas nasType.SpareHalfOctetAndNgksi) { - switch ngKsiModels.Tsc { case models.ScType_NATIVE: ngKsiNas.SetTSC(nasMessage.TypeOfSecurityContextFlagNative) diff --git a/nasConvert/Time.go b/nasConvert/Time.go index 489c37c..e2c4054 100644 --- a/nasConvert/Time.go +++ b/nasConvert/Time.go @@ -12,11 +12,10 @@ import ( ) func LocalTimeZoneToNas(timezone string) (nasTimezone nasType.LocalTimeZone) { - time := 0 if timezone[0] == '-' { - time = 64 //0x80 + time = 64 // 0x80 } if timezone[1] == '1' { @@ -40,7 +39,6 @@ func LocalTimeZoneToNas(timezone string) (nasTimezone nasType.LocalTimeZone) { } func DaylightSavingTimeToNas(timezone string) (nasDaylightSavingTimeToNas nasType.NetworkDaylightSavingTime) { - value := 0 if strings.Contains(timezone, "+1h") { diff --git a/nasTestpacket/NasPdu.go b/nasTestpacket/NasPdu.go index 58d47bb..8f714f9 100644 --- a/nasTestpacket/NasPdu.go +++ b/nasTestpacket/NasPdu.go @@ -77,7 +77,6 @@ func GetRegistrationRequest( } func GetPduSessionEstablishmentRequest(pduSessionId uint8) []byte { - m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypePDUSessionEstablishmentRequest) @@ -93,13 +92,11 @@ func GetPduSessionEstablishmentRequest(pduSessionId uint8) []byte { pduSessionEstablishmentRequest.IntegrityProtectionMaximumDataRate. SetMaximumDataRatePerUEForUserPlaneIntegrityProtectionForUpLink(0xff) - pduSessionEstablishmentRequest.PDUSessionType = - nasType.NewPDUSessionType(nasMessage.PDUSessionEstablishmentRequestPDUSessionTypeType) - pduSessionEstablishmentRequest.PDUSessionType.SetPDUSessionTypeValue(uint8(0x01)) //IPv4 type + pduSessionEstablishmentRequest.PDUSessionType = nasType.NewPDUSessionType(nasMessage.PDUSessionEstablishmentRequestPDUSessionTypeType) + pduSessionEstablishmentRequest.PDUSessionType.SetPDUSessionTypeValue(uint8(0x01)) // IPv4 type - pduSessionEstablishmentRequest.ExtendedProtocolConfigurationOptions = - nasType.NewExtendedProtocolConfigurationOptions( - nasMessage.PDUSessionEstablishmentRequestExtendedProtocolConfigurationOptionsType) + pduSessionEstablishmentRequest.ExtendedProtocolConfigurationOptions = nasType.NewExtendedProtocolConfigurationOptions( + nasMessage.PDUSessionEstablishmentRequestExtendedProtocolConfigurationOptionsType) protocolConfigurationOptions := nasConvert.NewProtocolConfigurationOptions() protocolConfigurationOptions.AddIPAddressAllocationViaNASSignallingUL() protocolConfigurationOptions.AddDNSServerIPv4AddressRequest() @@ -122,8 +119,8 @@ func GetPduSessionEstablishmentRequest(pduSessionId uint8) []byte { } func GetUlNasTransport_PduSessionEstablishmentRequest(pduSessionId uint8, requestType uint8, dnnString string, - sNssai *models.Snssai) []byte { - + sNssai *models.Snssai, +) []byte { pduSessionEstablishmentRequest := GetPduSessionEstablishmentRequest(pduSessionId) m := nas.NewMessage() @@ -177,8 +174,8 @@ func GetUlNasTransport_PduSessionEstablishmentRequest(pduSessionId uint8, reques } func GetUlNasTransport_PduSessionModificationRequest(pduSessionId uint8, requestType uint8, dnnString string, - sNssai *models.Snssai) []byte { - + sNssai *models.Snssai, +) []byte { pduSessionModificationRequest := GetPduSessionModificationRequest(pduSessionId) m := nas.NewMessage() @@ -232,7 +229,6 @@ func GetUlNasTransport_PduSessionModificationRequest(pduSessionId uint8, request } func GetPduSessionModificationRequest(pduSessionId uint8) []byte { - m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypePDUSessionModificationRequest) @@ -259,8 +255,8 @@ func GetPduSessionModificationRequest(pduSessionId uint8) []byte { return data.Bytes() } -func GetPduSessionModificationComplete(pduSessionId uint8) []byte { +func GetPduSessionModificationComplete(pduSessionId uint8) []byte { m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypePDUSessionModificationComplete) @@ -282,8 +278,8 @@ func GetPduSessionModificationComplete(pduSessionId uint8) []byte { return data.Bytes() } -func GetPduSessionModificationCommandReject(pduSessionId uint8) []byte { +func GetPduSessionModificationCommandReject(pduSessionId uint8) []byte { m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypePDUSessionModificationCommandReject) @@ -307,7 +303,6 @@ func GetPduSessionModificationCommandReject(pduSessionId uint8) []byte { } func GetPduSessionReleaseRequest(pduSessionId uint8) []byte { - m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypePDUSessionReleaseRequest) @@ -331,7 +326,6 @@ func GetPduSessionReleaseRequest(pduSessionId uint8) []byte { } func GetPduSessionReleaseComplete(pduSessionId uint8) []byte { - m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypePDUSessionReleaseComplete) @@ -355,7 +349,6 @@ func GetPduSessionReleaseComplete(pduSessionId uint8) []byte { } func GetPduSessionReleaseReject(pduSessionId uint8) []byte { - m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypePDUSessionReleaseReject) @@ -379,7 +372,6 @@ func GetPduSessionReleaseReject(pduSessionId uint8) []byte { } func GetPduSessionAuthenticationComplete(pduSessionId uint8) []byte { - m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypePDUSessionAuthenticationComplete) @@ -405,7 +397,6 @@ func GetPduSessionAuthenticationComplete(pduSessionId uint8) []byte { } func GetUlNasTransport_PduSessionCommonData(pduSessionId uint8, types string) []byte { - var payload []byte switch types { case PDUSesModiReq: @@ -453,7 +444,6 @@ func GetUlNasTransport_PduSessionCommonData(pduSessionId uint8, types string) [] } func GetIdentityResponse(mobileIdentity nasType.MobileIdentity) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeIdentityResponse) @@ -478,7 +468,6 @@ func GetIdentityResponse(mobileIdentity nasType.MobileIdentity) []byte { } func GetNotificationResponse(pDUSessionStatus []uint8) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeNotificationResponse) @@ -504,7 +493,6 @@ func GetNotificationResponse(pDUSessionStatus []uint8) []byte { } func GetConfigurationUpdateComplete() []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeConfigurationUpdateComplete) @@ -527,7 +515,6 @@ func GetConfigurationUpdateComplete() []byte { } func GetServiceRequest(serviceType uint8) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeServiceRequest) @@ -568,7 +555,6 @@ func GetServiceRequest(serviceType uint8) []byte { } func GetAuthenticationResponse(authenticationResponseParam []uint8, eapMsg string) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeAuthenticationResponse) @@ -607,7 +593,6 @@ func GetAuthenticationResponse(authenticationResponseParam []uint8, eapMsg strin } func GetAuthenticationFailure(cause5GMM uint8, authenticationFailureParam []uint8) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeAuthenticationFailure) @@ -639,7 +624,6 @@ func GetAuthenticationFailure(cause5GMM uint8, authenticationFailureParam []uint } func GetRegistrationComplete(sorTransparentContainer []uint8) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeRegistrationComplete) @@ -671,7 +655,6 @@ func GetRegistrationComplete(sorTransparentContainer []uint8) []byte { // TS 24.501 8.2.26. func GetSecurityModeComplete(nasMessageContainer []uint8) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeSecurityModeComplete) @@ -711,7 +694,6 @@ func GetSecurityModeComplete(nasMessageContainer []uint8) []byte { } func GetSecurityModeReject(cause5GMM uint8) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeSecurityModeReject) @@ -737,8 +719,8 @@ func GetSecurityModeReject(cause5GMM uint8) []byte { } func GetDeregistrationRequest(accessType uint8, switchOff uint8, ngKsi uint8, - mobileIdentity5GS nasType.MobileIdentity5GS) []byte { - + mobileIdentity5GS nasType.MobileIdentity5GS, +) []byte { m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeDeregistrationRequestUEOriginatingDeregistration) @@ -771,7 +753,6 @@ func GetDeregistrationRequest(accessType uint8, switchOff uint8, ngKsi uint8, } func GetDeregistrationAccept() []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeDeregistrationAcceptUETerminatedDeregistration) @@ -796,7 +777,6 @@ func GetDeregistrationAccept() []byte { } func GetStatus5GMM(cause uint8) []byte { - m := nas.NewMessage() m.GmmMessage = nas.NewGmmMessage() m.GmmHeader.SetMessageType(nas.MsgTypeStatus5GMM) @@ -820,7 +800,6 @@ func GetStatus5GMM(cause uint8) []byte { } func GetStatus5GSM(pduSessionId uint8, cause uint8) []byte { - m := nas.NewMessage() m.GsmMessage = nas.NewGsmMessage() m.GsmHeader.SetMessageType(nas.MsgTypeStatus5GSM) @@ -844,7 +823,6 @@ func GetStatus5GSM(pduSessionId uint8, cause uint8) []byte { } func GetUlNasTransport_Status5GSM(pduSessionId uint8, cause uint8) []byte { - payload := GetStatus5GSM(pduSessionId, cause) m := nas.NewMessage() @@ -876,7 +854,6 @@ func GetUlNasTransport_Status5GSM(pduSessionId uint8, cause uint8) []byte { } func GetUlNasTransport_PduSessionReleaseRequest(pduSessionId uint8) []byte { - pduSessionReleaseRequest := GetPduSessionReleaseRequest(pduSessionId) m := nas.NewMessage() @@ -908,8 +885,8 @@ func GetUlNasTransport_PduSessionReleaseRequest(pduSessionId uint8) []byte { } func GetUlNasTransport_PduSessionReleaseComplete(pduSessionId uint8, requestType uint8, dnnString string, - sNssai *models.Snssai) []byte { - + sNssai *models.Snssai, +) []byte { pduSessionReleaseRequest := GetPduSessionReleaseComplete(pduSessionId) m := nas.NewMessage() diff --git a/security/counter_test.go b/security/counter_test.go index 5ef29e1..7765126 100644 --- a/security/counter_test.go +++ b/security/counter_test.go @@ -32,7 +32,6 @@ func TestSetterGetter(t *testing.T) { assert.Equal(t, testCase.overflow, count.Overflow(), "Overflow() Failed") assert.Equal(t, testCase.sqn, count.SQN(), "SQN() Failed") } - } func TestAddOne(t *testing.T) { diff --git a/security/security.go b/security/security.go index 452a2f4..9d78a82 100644 --- a/security/security.go +++ b/security/security.go @@ -17,7 +17,8 @@ import ( ) func NASEncrypt(AlgoID uint8, KnasEnc [16]byte, Count uint32, Bearer uint8, - Direction uint8, payload []byte) error { + Direction uint8, payload []byte, +) error { if Bearer > 0x1f { return fmt.Errorf("Bearer is beyond 5 bits") } @@ -59,7 +60,8 @@ func NASEncrypt(AlgoID uint8, KnasEnc [16]byte, Count uint32, Bearer uint8, } func NASMacCalculate(AlgoID uint8, KnasInt [16]uint8, Count uint32, - Bearer uint8, Direction uint8, msg []byte) ([]byte, error) { + Bearer uint8, Direction uint8, msg []byte, +) ([]byte, error) { if Bearer > 0x1f { return nil, fmt.Errorf("Bearer is beyond 5 bits") } @@ -86,7 +88,6 @@ func NASMacCalculate(AlgoID uint8, KnasInt [16]uint8, Count uint32, default: return nil, fmt.Errorf("Unknown Algorithm Identity[%d]", AlgoID) } - } func NEA1(ck [16]byte, countC, bearer, direction uint32, ibs []byte, length uint32) (obs []byte, err error) { @@ -122,12 +123,13 @@ func NEA1(ck [16]byte, countC, bearer, direction uint32, ibs []byte, length uint // ibs: input bit stream, obs: output bit stream func NEA2(key [16]byte, count uint32, bearer uint8, direction uint8, - ibs []byte) (obs []byte, err error) { + ibs []byte, +) (obs []byte, err error) { // Couter[0..32] | BEARER[0..4] | DIRECTION[0] | 0^26 | 0^64 couterBlk := make([]byte, 16) - //First 32 bits are count + // First 32 bits are count binary.BigEndian.PutUint32(couterBlk, count) - //Put Bearer and direction together + // Put Bearer and direction together couterBlk[4] = (bearer << 3) | (direction << 2) block, err := aes.NewCipher(key[:]) @@ -143,7 +145,6 @@ func NEA2(key [16]byte, count uint32, bearer uint8, direction uint8, } func NEA3() { - } // mulx() is for NIA1() @@ -176,7 +177,8 @@ func mul(V, P, c uint64) uint64 { } func NIA1(ik [16]byte, countI uint32, bearer byte, direction uint32, msg []byte, length uint64) ( - mac []byte, err error) { + mac []byte, err error, +) { fresh := uint32(bearer) << 27 var k [4]uint32 for i := uint32(0); i < 4; i++ { @@ -184,7 +186,7 @@ func NIA1(ik [16]byte, countI uint32, bearer byte, direction uint32, msg []byte, } iv := [4]uint32{fresh ^ (direction << 15), countI ^ (direction << 31), fresh, countI} D := ((length + 63) / 64) + 1 - var z = make([]uint32, 5) + z := make([]uint32, 5) snow3g.InitSnow3g(k, iv) snow3g.GenerateKeystream(5, z) @@ -213,9 +215,9 @@ func NIA1(ik [16]byte, countI uint32, bearer byte, direction uint32, msg []byte, func NIA2(key [16]byte, count uint32, bearer uint8, direction uint8, msg []byte) (mac []byte, err error) { // Couter[0..32] | BEARER[0..4] | DIRECTION[0] | 0^26 m := make([]byte, len(msg)+8) - //First 32 bits are count + // First 32 bits are count binary.BigEndian.PutUint32(m, count) - //Put Bearer and direction together + // Put Bearer and direction together m[4] = (bearer << 3) | (direction << 2) block, err := aes.NewCipher(key[:]) @@ -235,5 +237,4 @@ func NIA2(key [16]byte, count uint32, bearer uint8, direction uint8, msg []byte) } func NIA3() { - } diff --git a/security/snow3g/snow3g.go b/security/snow3g/snow3g.go index 0c34e55..d0f21c8 100644 --- a/security/snow3g/snow3g.go +++ b/security/snow3g/snow3g.go @@ -51,8 +51,10 @@ type Fsm struct { r [3]uint32 } -var lfsr Lfsr -var fsm Fsm +var ( + lfsr Lfsr + fsm Fsm +) func mulx(V, c byte) byte { if V&0x80 != 0 { diff --git a/security/snow3g/snow3g_test.go b/security/snow3g/snow3g_test.go index 1abd9f5..b19d5e0 100644 --- a/security/snow3g/snow3g_test.go +++ b/security/snow3g/snow3g_test.go @@ -16,7 +16,7 @@ func Test1(t *testing.T) { iv := [4]uint32{0xea024714, 0xad5c4d84, 0xdf1f9b25, 0x1c0bf45f} z := [2]uint32{0xabee9704, 0x7ac31373} - var ks = make([]uint32, 2) + ks := make([]uint32, 2) snow3g.InitSnow3g(k, iv) snow3g.GenerateKeystream(2, ks) for i, k := range ks { @@ -31,7 +31,7 @@ func Test2(t *testing.T) { iv := [4]uint32{0xd3c5d592, 0x327fb11c, 0xde551988, 0xceb2f9b7} z := [2]uint32{0xeff8a342, 0xf751480f} - var ks = make([]uint32, 2) + ks := make([]uint32, 2) snow3g.InitSnow3g(k, iv) snow3g.GenerateKeystream(2, ks) for i, k := range ks { @@ -46,7 +46,7 @@ func Test3(t *testing.T) { iv := [4]uint32{0x62a54098, 0x1ba6f9b7, 0x4592b0e7, 0x8690f71b} z := [2]uint32{0xa8c874a9, 0x7ae7c4f8} - var ks = make([]uint32, 2) + ks := make([]uint32, 2) snow3g.InitSnow3g(k, iv) snow3g.GenerateKeystream(2, ks) for i, k := range ks { @@ -61,7 +61,7 @@ func Test4(t *testing.T) { iv := [4]uint32{0x6b68079a, 0x41a7c4c9, 0x1befd79f, 0x7fdcc233} z := [3]uint32{0xd712c05c, 0xa937c2a6, 0xeb7eaae3} - var ks = make([]uint32, 2500) + ks := make([]uint32, 2500) snow3g.InitSnow3g(k, iv) snow3g.GenerateKeystream(2500, ks) for i := 0; i < 3; i++ { From d114bc9431b328b17d9da1f3c1ad6f627bff25c9 Mon Sep 17 00:00:00 2001 From: "Arrobo, Gabriel" Date: Mon, 10 Jun 2024 20:27:50 -0700 Subject: [PATCH 4/6] Enable `whitespace` linter --- .golangci.yml | 3 ++- nasConvert/ProtocolConfigurationOptions.go | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 25edc16..326a708 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -224,7 +224,7 @@ linters: - ineffassign - typecheck # Additional - - lll + # - lll - godox # - gomnd #- maligned @@ -235,6 +235,7 @@ linters: - gci - misspell - gofumpt + - whitespace - noctx - dogsled - asciicheck diff --git a/nasConvert/ProtocolConfigurationOptions.go b/nasConvert/ProtocolConfigurationOptions.go index a92a73c..1624990 100644 --- a/nasConvert/ProtocolConfigurationOptions.go +++ b/nasConvert/ProtocolConfigurationOptions.go @@ -64,7 +64,6 @@ func (protocolConfigurationOptions *ProtocolConfigurationOptions) Marshal() []by } for _, containerUnit := range protocolConfigurationOptions.ProtocolOrContainerList { - if err := binary.Write(buffer, binary.BigEndian, &containerUnit.ProtocolOrContainerID); err != nil { logger.ConvertLog.Warnf("Write protocolOrContainerID failed: %+v", err) } From 44920349a9e4372c1a498e187b7eb5fdbb3a9576 Mon Sep 17 00:00:00 2001 From: "Arrobo, Gabriel" Date: Mon, 10 Jun 2024 20:42:46 -0700 Subject: [PATCH 5/6] Enable `predeclared` --- .golangci.yml | 2 ++ logger/logger.go | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 326a708..8457813 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -236,6 +236,8 @@ linters: - misspell - gofumpt - whitespace + # - unconvert + - predeclared - noctx - dogsled - asciicheck diff --git a/logger/logger.go b/logger/logger.go index ffc19bd..c7204ee 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -56,7 +56,7 @@ func SetLogLevel(level logrus.Level) { log.SetLevel(level) } -func SetReportCaller(bool bool) { - NasLog.Infoln("set report call :", bool) - log.SetReportCaller(bool) +func SetReportCaller(set bool) { + NasLog.Infoln("set report call :", set) + log.SetReportCaller(set) } From 933755ac092348e1f90195cfd0e7c95dad195b49 Mon Sep 17 00:00:00 2001 From: "Arrobo, Gabriel" Date: Mon, 10 Jun 2024 20:44:01 -0700 Subject: [PATCH 6/6] Remove some unnecessary conversions --- security/security.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/security/security.go b/security/security.go index 9d78a82..768f94f 100644 --- a/security/security.go +++ b/security/security.go @@ -204,9 +204,9 @@ func NIA1(ik [16]byte, countI uint32, bearer byte, direction uint32, msg []byte, M := binary.BigEndian.Uint64(tmp) Eval = mul(Eval^M, P, 0x000000000000001b) - Eval = Eval ^ uint64(length) + Eval = Eval ^ length Eval = mul(Eval, Q, 0x000000000000001b) - MacI := uint32(uint32(Eval>>32) ^ z[4]) + MacI := uint32(Eval>>32) ^ z[4] b := make([]byte, 4) binary.BigEndian.PutUint32(b, MacI) return b, nil