Saturday 15 May 2010

java - Documentation on "public key" returned by GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler:? -



java - Documentation on "public key" returned by GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler:? -

is there documentation apple covers format or algorithms used generate file returned - [gklocalplayer generateidentityverificationsignaturewithcompletionhandler:]?

i've seen few questions on basic flow of authenticating user, seem suggest file .cer file (application/pkix-cert), , uses der file format, can't find official apple.

i'm looking verify cert in java, if has examples, much appreciated well.

ios [localplayer generateidentityverificationsignaturewithcompletionhandler:^(nsurl *publickeyurl, nsdata *signature, nsdata *salt, uint64_t timestamp, nserror *error) { if(error != nil){ //login failed. }else{ nslog(@"signature : %@", [signature base64encoding]); nslog(@"salt : %@", [salt base64encoding]); nslog(@"public_key_url : %@", publickeyurl); nslog(@"signature : %@", [signature base64encodedstringwithoptions:0]); nslog(@"salt : %@", [salt base64encodedstringwithoptions:0]); nslog(@"timestamp : %lld", timestamp); nslog(@"gamecenter login success."); nsmutabledata *payload = [[nsmutabledata alloc] init]; [payload appenddata:[[gklocalplayer localplayer].playerid datausingencoding:nsutf8stringencoding]]; [payload appenddata:[[[nsbundle mainbundle] bundleidentifier] datausingencoding:nsutf8stringencoding]]; uint64_t timestampbe = cfswapint64hosttobig(timestamp); [payload appendbytes:&timestampbe length:sizeof(timestampbe)]; [payload appenddata:salt]; nsstring *ext_id = localplayer.playerid; nsstring *encodedsigneddata = [payload base64encodedstringwithoptions:0]; nslog(@"signeddata : %@", encodedsigneddata); nsstring *encodedsignature = [signature base64encoding]; nsstring *publickeyurlstr = [publickeyurl absolutestring]; } }]; java code is.. public static string makeencodedsigneddataforappleverify(string player_id, string bundle_id, string timestamp, string salt){ homecoming new string(base64.encodebase64(concat(player_id.getbytes(), bundle_id.getbytes(), bytebuffer.allocate(8).putlong(long.parselong(timestamp)).array(), base64.decodebase64(salt)))); } public static boolean gamecenteruserverify(string publickeyurl, string signeddata, string signature){ try{ url url = new url(publickeyurl); httpurlconnection urlconn = (httpurlconnection) url.openconnection(); httpurlconnection httpconn = (httpurlconnection) urlconn; httpconn.setallowuserinteraction(false); httpconn.connect(); inputstream in = httpconn.getinputstream(); bufferedinputstream bis = new bufferedinputstream(in); bytearraybuffer baf = new bytearraybuffer(99999); int read = 0; int bufsize = 512; byte[] buffer = new byte[bufsize]; while(true){ read = bis.read(buffer); if(read==-1){ break; } baf.append(buffer, 0, read); } byte[] bytes =baf.tobytearray(); bis.close(); in.close(); httpconn.disconnect(); certificatefactory cf = certificatefactory.getinstance("x509"); x509certificate c = (x509certificate) cf.generatecertificate(new bytearrayinputstream(bytes) ); publickey key22 = c.getpublickey(); byte[] result = base64.decodebase64(signeddata);//; byte[] decodedsignature = base64.decodebase64(signature); signature sig; seek { sig = signature.getinstance("sha256withrsa"); sig.initverify(key22); sig.update(result); if (!sig.verify(decodedsignature)) { homecoming false; }else{ homecoming true; } } grab (nosuchalgorithmexception e) { e.printstacktrace(); } grab (invalidkeyexception e) { e.printstacktrace(); } grab (signatureexception e) { e.printstacktrace(); } }catch(exception e){ e.printstacktrace(); } homecoming false; } static byte[] concat(byte[]...arrays) { // determine length of result array int totallength = 0; (int = 0; < arrays.length; i++) { totallength += arrays[i].length; } // create result array byte[] result = new byte[totallength]; // re-create source arrays result array int currentindex = 0; (int = 0; < arrays.length; i++) { system.arraycopy(arrays[i], 0, result, currentindex, arrays[i].length); currentindex += arrays[i].length; } homecoming result; }

java game-center x509certificate

No comments:

Post a Comment