Improved version attached.

19.11.2013 13:32, Peter Stuge пишет:
> Hi,
> 
> ☎ wrote:
>> Attached is a small patch which replaces direct call to comp128
>> from libosmocore to auth api call.
> 
> Thanks!
> 
> 
>> +++ b/openbsc/src/libmsc/auth.c
> ..
>> @@ -60,9 +59,17 @@ _use_comp128_v1(struct gsm_auth_info *ainfo, struct 
>> gsm_auth_tuple *atuple)
>>              return -1;
>>      }
>>  
>> -    comp128(ainfo->a3a8_ki, atuple->rand, atuple->sres, atuple->kc);
>> -
>> -    return 0;
>> +    static struct osmo_sub_auth_data auth = {
>> +        .type = OSMO_AUTH_TYPE_GSM,
>> +        .algo = OSMO_AUTH_ALG_COMP128v1
>> +    };
>> +    memcpy(auth.u.gsm.ki, ainfo->a3a8_ki, sizeof(auth.u.gsm.ki));
>> +    struct osmo_auth_vector _vec;
>> +    struct osmo_auth_vector *vec = &_vec;
>> +    int r = osmo_auth_gen_vec(vec, &auth, atuple->rand);
>> +    memcpy(atuple->sres, vec->sres, 4);
>> +    memcpy(atuple->kc, vec->kc, 8);
>> +    return r;
>>  }
> 
> Maybe add a newline or two, and I think the openbsc style is to
> declare all variables at the start of the function.
> 
> 
> //Peter
> 


-- 
best regards,
Max, http://fairwaves.ru
>From c4e3926aecea40d449a0442317e031a065253333 Mon Sep 17 00:00:00 2001
From: Max <[email protected]>
Date: Tue, 19 Nov 2013 13:42:44 +0100
Subject: [PATCH] Use generic libosmocom auth API.

---
 openbsc/src/libmsc/auth.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/openbsc/src/libmsc/auth.c b/openbsc/src/libmsc/auth.c
index 10d8edf..ed25495 100644
--- a/openbsc/src/libmsc/auth.c
+++ b/openbsc/src/libmsc/auth.c
@@ -24,8 +24,7 @@
 #include <openbsc/debug.h>
 #include <openbsc/auth.h>
 #include <openbsc/gsm_data.h>
-
-#include <osmocom/gsm/comp128.h>
+#include <osmocom/crypt/auth.h>
 
 #include <stdlib.h>
 
@@ -53,6 +52,13 @@ _use_xor(struct gsm_auth_info *ainfo, struct gsm_auth_tuple *atuple)
 static int
 _use_comp128_v1(struct gsm_auth_info *ainfo, struct gsm_auth_tuple *atuple)
 {
+        static struct osmo_sub_auth_data auth = {
+	    .type = OSMO_AUTH_TYPE_GSM,
+	    .algo = OSMO_AUTH_ALG_COMP128v1
+	};
+	struct osmo_auth_vector _vec;
+	struct osmo_auth_vector *vec = &_vec;
+
 	if (ainfo->a3a8_ki_len != A38_COMP128_KEY_LEN) {
 		LOGP(DMM, LOGL_ERROR, "Invalid COMP128v1 key (len=%d) %s\n",
 			ainfo->a3a8_ki_len,
@@ -60,9 +66,13 @@ _use_comp128_v1(struct gsm_auth_info *ainfo, struct gsm_auth_tuple *atuple)
 		return -1;
 	}
 
-	comp128(ainfo->a3a8_ki, atuple->rand, atuple->sres, atuple->kc);
+	memcpy(auth.u.gsm.ki, ainfo->a3a8_ki, sizeof(auth.u.gsm.ki));
 
-	return 0;
+	int r = osmo_auth_gen_vec(vec, &auth, atuple->rand);
+	memcpy(atuple->sres, vec->sres, 4);
+	memcpy(atuple->kc, vec->kc, 8);
+
+	return r;
 }
 
 /* Return values 
-- 
1.8.3.2

Reply via email to