oxirush_nas/
lib.rs

1/*
2    OxiRush
3    Copyright 2025 Valentin D'Emmanuele
4
5    Licensed under the Apache License, Version 2.0 (the "License");
6    you may not use this file except in compliance with the License.
7    You may obtain a copy of the License at
8
9    http://www.apache.org/licenses/LICENSE-2.0
10
11    Unless required by applicable law or agreed to in writing, software
12    distributed under the License is distributed on an "AS IS" BASIS,
13    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14    See the License for the specific language governing permissions and
15    limitations under the License.
16 */
17
18
19pub mod types;
20pub mod message_types;
21pub mod messages;
22
23// Re-export key types and functions for easier use
24pub use types::{NasError, Result, Encode, Decode, *};
25pub use message_types::{Nas5gmmMessageType, Nas5gsmMessageType, Nas5gsSecurityHeaderType};
26pub use messages::{
27    Nas5gsMessage, Nas5gmmMessage, Nas5gsmMessage,
28    encode_nas_5gs_message, decode_nas_5gs_message,
29};
30
31/// Version of oxirush-nas
32pub const VERSION: &str = env!("CARGO_PKG_VERSION");
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37    use base64::prelude::*;
38    
39    #[test]
40    fn test_registration_request_1() {
41        let payload = hex::decode("7e004179000d0199f9070000000000000010022e08a020000000000000").unwrap();
42
43        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
44        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
45
46        assert_eq!(payload, encoded_message);
47    }
48        
49    #[test]
50    fn test_auth_request() {
51        let payload = hex::decode("7e00560002000021ab6f2a1cc5c5938d38cba14dfe26b0012010a820e67b8896800076a638e98eed4747").unwrap();
52
53        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
54        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
55
56        assert_eq!(payload, encoded_message);
57    }
58        
59    #[test]
60    fn test_security_mode_command() {
61        let payload = hex::decode("7e005d020002a020e1360102").unwrap();
62
63        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
64        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
65
66        assert_eq!(payload, encoded_message);
67    }
68
69    #[test]
70    fn test_registration_request_2() {
71        let payload = BASE64_STANDARD.decode("fgBedwAJFREAAAAAAAAAcQAgfgBBCQANAZn5BwAAAAAAAAAQAhABBy4IoCAAAAAAAAA=").unwrap();
72
73        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
74        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
75
76        assert_eq!(payload, encoded_message);
77    }
78
79    #[test]
80    fn test_registration_accept() {
81        let payload = BASE64_STANDARD.decode("fgBCAQF3AAvymfkHAgBAwAAC31QHQJn5BwAAARUCAQEhAgEAXgGp").unwrap();
82
83        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
84        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
85
86        assert_eq!(payload, encoded_message);
87    }
88
89    #[test]
90    fn test_registration_complete() {
91        let payload = BASE64_STANDARD.decode("fgBD").unwrap();
92
93        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
94        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
95
96        assert_eq!(payload, encoded_message);
97    }
98    
99    #[test]
100    fn test_pdu_session_establishment_request() {
101        let payload = BASE64_STANDARD.decode("fgBnAQAULgEBwf//kXsACoAACgAADQAAAwASAYEiAQElCQhpbnRlcm5ldA==").unwrap();
102
103        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
104        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
105
106        assert_eq!(payload, encoded_message);
107    }
108        
109    #[test]
110    fn test_configuration_update_command() {
111        let payload = BASE64_STANDARD.decode("fgBUQw+QAE8AcABlAG4ANQBHAFNGAEdCMGICZHEASQEA").unwrap();
112
113        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
114        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
115
116        assert_eq!(payload, encoded_message);
117    }
118        
119    #[test]
120    fn test_configuration_update_complete() {
121        let payload = BASE64_STANDARD.decode("fgBV").unwrap();
122
123        decode_nas_5gs_message(&payload).err().unwrap();
124    }
125
126    #[test]
127    fn test_pdu_session_establishment_accept() {
128        let payload = BASE64_STANDARD.decode("fgBoAQBtLgEBwhEACQEABjExAQH/AQYD9CQD9CQpBQEKLQC9IgEBeQAGASBBAQEJewA1gAANBAgICAgADQQICAQEAAMQIAFIYEhgAAAAAAAAAACIiAADECABSGBIYAAAAAAAAAAAiEQlCQhpbnRlcm5ldBIB").unwrap();
129
130        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
131        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
132
133        assert_eq!(payload, encoded_message);
134    }
135        
136    #[test]
137    fn test_service_request() {
138        let payload = BASE64_STANDARD.decode("fgBMEAAHBABAwAAC33EAFX4ATBAABwQAQMAAAt9AAgIAUAICAA==").unwrap();
139
140        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
141        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
142
143        assert_eq!(payload, encoded_message);
144    }
145
146    #[test]
147    fn test_service_accept() {
148        let payload = BASE64_STANDARD.decode("fgBOUAICACYCAAA=").unwrap();
149
150        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
151        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
152
153        assert_eq!(payload, encoded_message);
154    }
155
156    #[test]
157    fn test_pdu_session_release_request() {
158        let payload = BASE64_STANDARD.decode("fgBnAQAELgEB0RIB").unwrap();
159
160        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
161        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
162
163        assert_eq!(payload, encoded_message);
164    }
165
166    #[test]
167    fn test_pdu_session_release_command() {
168        let payload = BASE64_STANDARD.decode("fgBoAQAFLgEB0yQSAQ==").unwrap();
169
170        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
171        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
172
173        assert_eq!(payload, encoded_message);
174    }
175        
176    #[test]
177    fn test_deregistration_request() {
178        let payload = BASE64_STANDARD.decode("fgBFCQAL8pn5BwIAQMAAAt8=").unwrap();
179
180        let parsed_message = decode_nas_5gs_message(&payload).unwrap();
181        let encoded_message = encode_nas_5gs_message(&parsed_message).unwrap();
182
183        assert_eq!(payload, encoded_message);
184    }
185}