1pub mod types;
20pub mod message_types;
21pub mod messages;
22
23pub 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
31pub 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}