@@ -326,22 +326,23 @@ private static void configLog4j() {
326
326
327
327
static final private String persistDir = "XmlDiameterFirewall" ;
328
328
329
+ // proprietary autodiscovery used for asymetric encryption
330
+ // not according to IANA and GSMA FS.19
329
331
static final private int CC_AUTO_ENCRYPTION = 999 ;
330
332
static final private int AVP_AUTO_ENCRYPTION_CAPABILITIES = 1101 ;
331
333
static final private int AVP_AUTO_ENCRYPTION_REALM = 1102 ;
332
334
static final private int AVP_AUTO_ENCRYPTION_PUBLIC_KEY = 1103 ;
333
335
static final private int AVP_AUTO_ENCRYPTION_PUBLIC_KEY_TYPE = 1104 ;
334
- static final public int AVP_DESS_SIGNING_REALM = 1105 ;
336
+ //
335
337
336
338
// Command Code for DatagramOverDiameterPacket
337
339
static final private int AI_DESS_INTERFACE = 16777360 ;
338
340
static final public int VENDOR_ID = 46304 ;
339
341
static final private int CC_DTLS_HANDSHAKE_CLIENT = 8388737 ; // DTLS handshake messages
340
342
static final private int CC_DTLS_HANDSHAKE_SERVER = 8388738 ; // DTLS handshake messages
341
- //static final private int CC_DTLS_HANDSHAKE_REQUESTED = 1112; // handshake requested by server
342
- static final private int AVP_DTLS_DATA = 1112 ;
343
- static final private int AVP_ENCRYPTED_GROUPED_DTLS = 1115 ;
344
-
343
+ static final private int AVP_DESS_ENCRYPTED = 2000 ;
344
+ static final private int AVP_DESS_DTLS_DATA = 2001 ;
345
+
345
346
/**
346
347
* Reset Unit Testing Flags
347
348
*/
@@ -1179,21 +1180,6 @@ public void run() {
1179
1180
&& cc != CC_DTLS_HANDSHAKE_CLIENT && cc != CC_DTLS_HANDSHAKE_SERVER ) {
1180
1181
// ------------- Diameter verify --------------
1181
1182
if (DiameterFirewallConfig .origin_realm_verify .containsKey (orig_realm )) {
1182
- /*if (msg.getAvps().getAvp(AVP_DESS_SIGNING_REALM) == null) {
1183
- // Missing AVP_DESS_SIGNING_REALM, message dropped
1184
- firewallMessage(asctn, pd.getPayloadProtocolId(), pd.getStreamNumber(), msg, "Missing AVP_DESS_SIGNING_REALM, message dropped", lua_hmap);
1185
- return;
1186
- }
1187
- String signing_realm;
1188
- try {
1189
- signing_realm = new String(msg.getAvps().getAvp(AVP_DESS_SIGNING_REALM).getOctetString());
1190
- } catch (AvpDataException ex) {
1191
- //java.util.logging.Logger.getLogger(DiameterFirewall.class.getName()).log(Level.SEVERE, null, ex);
1192
- firewallMessage(asctn, pd.getPayloadProtocolId(), pd.getStreamNumber(), msg, "Decoding error with AVP_DESS_SIGNING_REALM, message dropped", lua_hmap);
1193
- return;
1194
- }
1195
- PublicKey publicKey = DiameterFirewallConfig.origin_realm_verify_signing_realm.get(orig_realm + ":" + signing_realm);
1196
- */
1197
1183
String r = crypto .diameterVerify (msg , DiameterFirewallConfig .origin_realm_verify_signing_realm );
1198
1184
if (!r .equals ("" )) {
1199
1185
firewallMessage (asctn , pd .getPayloadProtocolId (), pd .getStreamNumber (), msg , r , lua_hmap );
@@ -1234,7 +1220,7 @@ public void run() {
1234
1220
}
1235
1221
}
1236
1222
// No DTLS engine, but recieved DTLS encrypted data
1237
- else if (msg .getAvps ().getAvp (AVP_ENCRYPTED_GROUPED_DTLS , VENDOR_ID ) != null ) {
1223
+ else if (msg .getAvps ().getAvp (AVP_DESS_ENCRYPTED , VENDOR_ID ) != null ) {
1238
1224
needDTLSHandshakeReason = "needDTLSHandshake indicated, because no DTLS engine, but recieved Request with DTLS encrypted data from realm: " + orig_realm ;
1239
1225
1240
1226
needDTLSHandshake = true ;
@@ -1275,7 +1261,7 @@ else if (!msg.isRequest()) {
1275
1261
}
1276
1262
}
1277
1263
// No DTLS engine, but recieved DTLS encrypted data
1278
- else if (msg .getAvps ().getAvp (AVP_ENCRYPTED_GROUPED_DTLS , VENDOR_ID ) != null ) {
1264
+ else if (msg .getAvps ().getAvp (AVP_DESS_ENCRYPTED , VENDOR_ID ) != null ) {
1279
1265
needDTLSHandshake = true ;
1280
1266
1281
1267
needDTLSHandshakeReason = "needDTLSHandshake indicated, because no DTLS engine, but recieved Answer with DTLS encrypted data from realm: " + orig_realm ;
@@ -1583,7 +1569,7 @@ public void run() {
1583
1569
// process only requests
1584
1570
if (msg .isRequest ()) {
1585
1571
if (msg .getAvps () != null ) {
1586
- if (msg .getAvps ().getAvp (AVP_DTLS_DATA , VENDOR_ID ) != null ) {
1572
+ if (msg .getAvps ().getAvp (AVP_DESS_DTLS_DATA , VENDOR_ID ) != null ) {
1587
1573
1588
1574
logger .info ("Received DTLS handshake message from realm: " + orig_realm );
1589
1575
@@ -1596,7 +1582,7 @@ public void run() {
1596
1582
datagramOverDiameterSocket_inbound_server .put (orig_realm , new ConcurrentLinkedQueue <DatagramOverDiameterPacket >());
1597
1583
}
1598
1584
1599
- datagramOverDiameterSocket_inbound_server .get (orig_realm ).add (new DatagramOverDiameterPacket (orig_realm , new DatagramPacket (msg .getAvps ().getAvp (AVP_DTLS_DATA , VENDOR_ID ).getOctetString (), msg .getAvps ().getAvp (AVP_DTLS_DATA , VENDOR_ID ).getOctetString ().length )));
1585
+ datagramOverDiameterSocket_inbound_server .get (orig_realm ).add (new DatagramOverDiameterPacket (orig_realm , new DatagramPacket (msg .getAvps ().getAvp (AVP_DESS_DTLS_DATA , VENDOR_ID ).getOctetString (), msg .getAvps ().getAvp (AVP_DESS_DTLS_DATA , VENDOR_ID ).getOctetString ().length )));
1600
1586
1601
1587
1602
1588
boolean needHandshake = false ;
@@ -1678,7 +1664,7 @@ else if (cc == CC_DTLS_HANDSHAKE_SERVER) {
1678
1664
datagramOverDiameterSocket_inbound_client .put (orig_realm , new ConcurrentLinkedQueue <DatagramOverDiameterPacket >());
1679
1665
}
1680
1666
1681
- datagramOverDiameterSocket_inbound_client .get (orig_realm ).add (new DatagramOverDiameterPacket (orig_realm , new DatagramPacket (msg .getAvps ().getAvp (AVP_DTLS_DATA , VENDOR_ID ).getOctetString (), msg .getAvps ().getAvp (AVP_DTLS_DATA , VENDOR_ID ).getOctetString ().length )));
1667
+ datagramOverDiameterSocket_inbound_client .get (orig_realm ).add (new DatagramOverDiameterPacket (orig_realm , new DatagramPacket (msg .getAvps ().getAvp (AVP_DESS_DTLS_DATA , VENDOR_ID ).getOctetString (), msg .getAvps ().getAvp (AVP_DESS_DTLS_DATA , VENDOR_ID ).getOctetString ().length )));
1682
1668
1683
1669
}
1684
1670
@@ -2531,7 +2517,7 @@ void dtls_sendDatagramOverDiameter(Association asctn, String _peer_realm, Datagr
2531
2517
message .getAvps ().addAvp (Avp .DESTINATION_HOST , _peer_realm , true , false , true );
2532
2518
message .getAvps ().addAvp (Avp .ORIGIN_REALM , DiameterFirewallConfig .hplmn_realms .firstKey (), true , false , true );
2533
2519
message .getAvps ().addAvp (Avp .ORIGIN_HOST , DiameterFirewallConfig .hplmn_realms .firstKey (), true , false , true );
2534
- message .getAvps ().addAvp (AVP_DTLS_DATA , p .getP ().getData (), VENDOR_ID , false , false );
2520
+ message .getAvps ().addAvp (AVP_DESS_DTLS_DATA , p .getP ().getData (), VENDOR_ID , false , false );
2535
2521
2536
2522
//message.setHeaderApplicationId(AI_DESS_INTERFACE);
2537
2523
@@ -2636,7 +2622,7 @@ public boolean _diameterDTLSEncrypt(Message message, SSLEngine engine) {
2636
2622
2637
2623
AvpSet avps = message .getAvps ();
2638
2624
2639
- AvpSet erAvp = avps .addGroupedAvp (AVP_ENCRYPTED_GROUPED_DTLS , VENDOR_ID , false , true );
2625
+ AvpSet erAvp = avps .addGroupedAvp (AVP_DESS_ENCRYPTED , VENDOR_ID , false , true );
2640
2626
2641
2627
for (int i = 0 ; i < avps .size (); i ++) {
2642
2628
Avp a = avps .getAvpByIndex (i );
@@ -2652,7 +2638,7 @@ public boolean _diameterDTLSEncrypt(Message message, SSLEngine engine) {
2652
2638
a .getCode () != Avp .ROUTE_RECORD &&
2653
2639
a .getCode () != Crypto .AVP_ENCRYPTED &&
2654
2640
a .getCode () != Crypto .AVP_ENCRYPTED_GROUPED &&
2655
- a .getCode () != AVP_ENCRYPTED_GROUPED_DTLS
2641
+ a .getCode () != AVP_DESS_ENCRYPTED
2656
2642
) {
2657
2643
erAvp .addAvp (a .getCode (), a .getRawData (), a .getVendorId (), a .isMandatory (), a .isEncrypted ());
2658
2644
avps .removeAvpByIndex (i );
@@ -2690,8 +2676,8 @@ public boolean _diameterDTLSEncrypt(Message message, SSLEngine engine) {
2690
2676
cipherTextBuffer .get (cipherText );
2691
2677
2692
2678
//logger.debug("Add AVP Grouped Encrypted. Current index");
2693
- avps .removeAvp (AVP_ENCRYPTED_GROUPED_DTLS , VENDOR_ID );
2694
- avps .addAvp (AVP_ENCRYPTED_GROUPED_DTLS , cipherText , VENDOR_ID , false , true );
2679
+ avps .removeAvp (AVP_DESS_ENCRYPTED , VENDOR_ID );
2680
+ avps .addAvp (AVP_DESS_ENCRYPTED , cipherText , VENDOR_ID , false , true );
2695
2681
2696
2682
} catch (Exception ex ) {
2697
2683
java .util .logging .Logger .getLogger (DiameterFirewall .class .getName ()).log (Level .SEVERE , null , ex );
@@ -2726,7 +2712,7 @@ public boolean _diameterDTLSDecrypt(Message message, SSLEngine engine) {
2726
2712
2727
2713
//logger.debug("AVP[" + i + "] Code = " + a.getCode());
2728
2714
2729
- if (a .getCode () == AVP_ENCRYPTED_GROUPED_DTLS && a .isVendorId () && a .getVendorId () == VENDOR_ID ) {
2715
+ if (a .getCode () == AVP_DESS_ENCRYPTED && a .isVendorId () && a .getVendorId () == VENDOR_ID ) {
2730
2716
AvpSetImpl _avps ;
2731
2717
try {
2732
2718
logger .debug ("Diameter Decryption of Grouped Encrypted DTLS AVP" );
@@ -2838,7 +2824,7 @@ public boolean diameterDTLSEncrypt(Message message, SSLEngine engine) {
2838
2824
// cloned AVPs
2839
2825
AvpSet avps = ((Message ) ((IMessage ) message ).clone ()).getAvps ();
2840
2826
2841
- AvpSet erAvp = avps .addGroupedAvp (AVP_ENCRYPTED_GROUPED_DTLS , VENDOR_ID , false , true );
2827
+ AvpSet erAvp = avps .addGroupedAvp (AVP_DESS_ENCRYPTED , VENDOR_ID , false , true );
2842
2828
2843
2829
// Fill the AVP_ENCRYPTED_GROUPED_DTLS with cloned AVPs
2844
2830
for (int i = 0 ; i <_avps .size (); i ++) {
@@ -2855,7 +2841,7 @@ public boolean diameterDTLSEncrypt(Message message, SSLEngine engine) {
2855
2841
a .getCode () != Avp .ROUTE_RECORD &&
2856
2842
a .getCode () != Crypto .AVP_ENCRYPTED &&
2857
2843
a .getCode () != Crypto .AVP_ENCRYPTED_GROUPED &&
2858
- a .getCode () != AVP_ENCRYPTED_GROUPED_DTLS
2844
+ a .getCode () != AVP_DESS_ENCRYPTED
2859
2845
) {
2860
2846
erAvp .addAvp (a .getCode (), a .getRawData (), a .getVendorId (), a .isMandatory (), a .isEncrypted ());
2861
2847
//avps.removeAvpByIndex(i);
@@ -2901,7 +2887,7 @@ public boolean diameterDTLSEncrypt(Message message, SSLEngine engine) {
2901
2887
2902
2888
//logger.debug("Add AVP Grouped Encrypted. Current index");
2903
2889
//_avps.removeAvp(AVP_ENCRYPTED_GROUPED_DTLS);
2904
- _avps .addAvp (AVP_ENCRYPTED_GROUPED_DTLS , cipherText , VENDOR_ID , false , true );
2890
+ _avps .addAvp (AVP_DESS_ENCRYPTED , cipherText , VENDOR_ID , false , true );
2905
2891
2906
2892
} catch (Exception ex ) {
2907
2893
java .util .logging .Logger .getLogger (DiameterFirewall .class .getName ()).log (Level .SEVERE , null , ex );
@@ -2937,7 +2923,7 @@ public boolean diameterDTLSDecrypt(Message message, SSLEngine engine) {
2937
2923
2938
2924
//logger.debug("AVP[" + i + "] Code = " + a.getCode());
2939
2925
2940
- if (a .getCode () == AVP_ENCRYPTED_GROUPED_DTLS && a .isVendorId () && a .getVendorId () == VENDOR_ID ) {
2926
+ if (a .getCode () == AVP_DESS_ENCRYPTED && a .isVendorId () && a .getVendorId () == VENDOR_ID ) {
2941
2927
AvpSetImpl _avps ;
2942
2928
try {
2943
2929
logger .debug ("Diameter Decryption of Grouped Encrypted DTLS AVP" );
@@ -3015,7 +3001,7 @@ public boolean diameterDTLSDecrypt(Message message, SSLEngine engine) {
3015
3001
avps.removeAvpByIndex(i + _avps.size());*/
3016
3002
3017
3003
mergeAVPLists (avps , _avps );
3018
- avps .removeAvp (AVP_ENCRYPTED_GROUPED_DTLS , VENDOR_ID );
3004
+ avps .removeAvp (AVP_DESS_ENCRYPTED , VENDOR_ID );
3019
3005
3020
3006
} catch (IOException ex ) {
3021
3007
java .util .logging .Logger .getLogger (DiameterFirewall .class .getName ()).log (Level .SEVERE , null , ex );
0 commit comments