I worked on a coldfusion implementation of RSA-SHA1 signatures
(calling java methods inside coldfusion itself). Posting it here, in
case someone finds it useful, or if someone cares to embed in the code
itself. Refine it, use it, do it...
<cfset rsaPrivateKey = "{base 64 string of pkcs8 private key}">
<cfset rsaPublicKey="{base 64 string of x509 public key}">
<cfset appSignature = "#encodePercent(rsa_sha1(rsaPrivateKey,
rsaPublicKey, {url-encoded base signature string}))#">
<cffunction name="rsa_sha1" returntype="string" access="public"
descrition="RSA-SHA1 computation based on supplied private key &
supplied base signature string. Also verifies generated signatures
thru supplied public key as well.">
<cfargument name="signKey" type="string" required="true"
hint="base64 formatted PKCS8 private key">
<cfargument name="signPub" type="string" required="true"
hint="base64 formatted X509 public key">
<cfargument name="signMessage" type="string" required="true"
hint="msg to sign">
<cfargument name="sFormat" type="string" required="false"
default="iso-8859-1">
<cfset var jKey = JavaCast("string", arguments.signKey)>
<cfset var jPub = JavaCast("string", arguments.signPub)>
<cfset var jMsg = JavaCast("string",
arguments.signMessage).getBytes(arguments.sFormat)>
<cfset var key = createObject("java", "java.security.PrivateKey")>
<cfset var keySpec = createObject("java",
"java.security.spec.PKCS8EncodedKeySpec")>
<cfset var pub = createObject("java", "java.security.PublicKey")>
<cfset var pubSpec = createObject("java",
"java.security.spec.X509EncodedKeySpec")>
<cfset var keyFactory = createObject("java",
"java.security.KeyFactory")>
<cfset var b64dec = createObject("java", "sun.misc.BASE64Decoder")
>
<cfset var sig = createObject("java", "java.security.Signature")>
<cfset var byteClass = createObject("java", "java.lang.Class")>
<cfset var byteArray = createObject("java",
"java.lang.reflect.Array")>
<cfset byteClass = byteClass.forName(JavaCast("string",
"java.lang.Byte"))>
<cfset keyBytes = byteArray.newInstance(byteClass, JavaCast("int",
"1024"))>
<cfset keyBytes = b64dec.decodeBuffer(jKey)>
<cfset pubBytes = byteArray.newInstance(byteClass, JavaCast("int",
"1024"))>
<cfset pubBytes = b64dec.decodeBuffer(jPub)>
<cfset sig = sig.getInstance("SHA1withRSA", "SunJSSE")>
<cfset sig.initSign(keyFactory.getInstance("RSA").generatePrivate
(keySpec.init(keyBytes)))>
<cfset sig.update(jMsg)>
<cfset signBytes = sig.sign()>
<cfset sig.initVerify(keyFactory.getInstance
("RSA").generatePublic(pubSpec.init(pubBytes)))>
<cfset sig.update(jMsg)>
<cfset verifyFlag = sig.verify(signBytes)>
<cfoutput>verified = #verifyFlag#<br/><br/></cfoutput>
<cfreturn ToBase64(signBytes)>
</cffunction>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"OAuth" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [email protected]
For more options, visit this group at http://groups.google.com/group/oauth?hl=en
-~----------~----~----~----~------~----~------~--~---