<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Using sas/secure to generate hmac-sha1 oauth signature in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169937#M32658</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;@FriedEgg,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for taking the time to respond and apologies for not starting a new post.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Once I have a Java compiler installed on my machine I'll certainly give your other method a go.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 21 May 2015 13:43:09 GMT</pubDate>
    <dc:creator>NG_Forest</dc:creator>
    <dc:date>2015-05-21T13:43:09Z</dc:date>
    <item>
      <title>Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169922#M32643</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello everyone,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm trying to use sas/secure to generate a hmac-sha1 oauth signature.&amp;nbsp; I have SAS 9.3 installed on a PC running windows 7 professional.&amp;nbsp; Note I tried using proc pwencode with Method=sas003.&amp;nbsp; My code ran, but the signature did not match the one I generated online.&amp;nbsp; It was way too long.&amp;nbsp; I'm using the linked page below to create the oauth_signature.&amp;nbsp; How should I go about solving this problem?&amp;nbsp; Do I need to use java (yikes!), or can I simply use a proc or options statement?&amp;nbsp; Any help would be greatly appreciated.&amp;nbsp; Thanks very much.&lt;/P&gt;&lt;P&gt;-Bill&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://nouncer.com/oauth/authentication.html" title="http://nouncer.com/oauth/authentication.html"&gt;http://nouncer.com/oauth/authentication.html&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Feb 2015 09:09:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169922#M32643</guid>
      <dc:creator>BillJones</dc:creator>
      <dc:date>2015-02-15T09:09:04Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169923#M32644</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Specifying method=sas003 will give you 256-bit key plus 16-bit salt AES encoding, totally different from SHA1.&amp;nbsp; There is not a way (that I am familiar with) to generate a SHA1 hash with PROC PWENCODE.&amp;nbsp; You can use java, which wouldn't be too complicated.&amp;nbsp; Made much easier by the fact that PROC GROOVY exists in 9.3+&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;%let toHash=something to hashify;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc groovy;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;submit "&amp;amp;toHash.";&lt;/P&gt;&lt;P&gt;import java.security.MessageDigest&lt;/P&gt;&lt;P&gt;exports.sha1 = new BigInteger(1, MessageDigest.getInstance("SHA1").digest(args[0].getBytes())).toString(16)&lt;/P&gt;&lt;P&gt;endsubmit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put &amp;amp;sha1.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Side-note: You shouldn't post the same question to multiple communities.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Feb 2015 22:20:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169923#M32644</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-02-15T22:20:34Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169924#M32645</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;FriedEgg,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks so much for your help.&amp;nbsp; Code works and produces a sha1 signature.&amp;nbsp; Quick follow-up questions, if I have key and text components to go into the digest function (digest = HMAC-SHA1 (key, text)), can I simply use a macro variable like %let disgest_inputs=&amp;amp;key.,&amp;amp;text.;?&amp;nbsp; Or should I do something different?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My apologies about the double post.&amp;nbsp; I deleted the other thread.&amp;nbsp; I was having trouble posting my question the other night and inadvertently created a duplicate post.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Bill&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Feb 2015 08:54:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169924#M32645</guid>
      <dc:creator>BillJones</dc:creator>
      <dc:date>2015-02-16T08:54:27Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169925#M32646</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;%let key = mykey;&lt;/P&gt;&lt;P&gt;%let message = helloworld;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc groovy;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;submit "&amp;amp;key." "&amp;amp;message.";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;import javax.crypto.Mac&lt;/P&gt;&lt;P&gt;import javax.crypto.spec.SecretKeySpec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;def hmacsha1(key, message) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mac = Mac.getInstance("HmacSHA1")&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA1"))&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sha1_bytes = mac.doFinal(message.getBytes())&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new BigInteger(1, sha1_bytes).toString(16)&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;exports.hmacsha1 = hmacsha1(args[0], args[1])&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endsubmit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put &amp;amp;hmacsha1.;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Feb 2015 14:12:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169925#M32646</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-02-16T14:12:07Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169926#M32647</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;FriedEgg,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks so much for the code and your time.&amp;nbsp; I tried to recreate the oauth_signature for a GET example on nouncer.com (url is below).&amp;nbsp; I created macro variables that generate the key and message inputs correctly (comparisons are below).&amp;nbsp; However, when I compute the oauth_signature, I get a much different answer to what's on the website.&amp;nbsp; Noucner.com states that the oauth_signature must be &lt;SPAN style="color: #696969; font-family: Arial, Helvetica, sans-serif; font-size: 12px;"&gt;base64-encoded.&amp;nbsp;&amp;nbsp;&amp;nbsp; I'm using put statement with format $base64x32767.&amp;nbsp; Is this correct?&amp;nbsp; Also, s&lt;/SPAN&gt;hould I upgrade java?&amp;nbsp; Currently, I'm running version 6 update 24.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again and sorry to keep hassling you with this.&lt;/P&gt;&lt;P&gt;-Bill&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt; text-decoration: underline;"&gt;&lt;STRONG&gt;Compare &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG style="text-decoration: underline;"&gt;oauth signature inputs&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="line-height: 1.5em; font-size: 10pt; text-decoration: underline;"&gt;Key&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;sas&lt;/P&gt;&lt;P&gt;kd94hf93k423kf44&amp;amp;pfkkdhi9sl3r4s00&lt;/P&gt;&lt;P&gt;website&lt;/P&gt;&lt;P&gt;kd94hf93k423kf44&amp;amp;pfkkdhi9sl3r4s00&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;Message&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;sas&lt;/P&gt;&lt;P&gt;GET&amp;amp;http%3A%2F%2Fphotos.example.net%2Fphotos&amp;amp;file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;website (called signature base string)&lt;/P&gt;&lt;P&gt;GET&amp;amp;http%3A%2F%2Fphotos.example.net%2Fphotos&amp;amp;file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;Compare oauth_signature output&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;sas&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;YjUxZGZlNGYyZjM1OTRjNzk4MDJiZmM1ODlkZDI0MzEzNjFhZmQ2Mw==&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;website&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;tR3+Ty81lMeYAr/Fid0kMTYa/WM=&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Link to GET example on &lt;A href="http://nouncer.com/oauth/authentication.html" style="color: #0e66ba; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;" title="http://nouncer.com/oauth/authentication.html"&gt;http://nouncer.com/oauth/authentication.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;(May have to first click on a radio button on the top of the page to something other than the example and then back on the example to see the details.&amp;nbsp; This is the only way that I can view all the information.)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;SAS log:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;529&amp;nbsp; dm 'clear log';&lt;/P&gt;&lt;P&gt;530&lt;/P&gt;&lt;P&gt;531&amp;nbsp; *Oauth vars;&lt;/P&gt;&lt;P&gt;532&amp;nbsp; %let oauth_consumer_key=dpf43f3p2l4k3l03;&lt;/P&gt;&lt;P&gt;533&amp;nbsp; %let oauth_consumer_secret=kd94hf93k423kf44;&lt;/P&gt;&lt;P&gt;534&amp;nbsp; %let oauth_token=nnch734d00sl2jdk;&lt;/P&gt;&lt;P&gt;535&amp;nbsp; %let oauth_token_secret=pfkkdhi9sl3r4s00;&lt;/P&gt;&lt;P&gt;536&amp;nbsp; %let oauth_signature_method=HMAC-SHA1;&lt;/P&gt;&lt;P&gt;537&amp;nbsp; %let oauth_version=1.0;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;538&amp;nbsp; %let url=%sysfunc(urlencode(&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://photos.example.net/photos));"&gt;http://photos.example.net/photos));&lt;/A&gt;&lt;/P&gt;&lt;P&gt;539&amp;nbsp; %let oauth_size=original;&lt;/P&gt;&lt;P&gt;540&amp;nbsp; %let oauth_file=vacation.jpg;&lt;/P&gt;&lt;P&gt;541&amp;nbsp; %let oauth_timestamp=1191242096;&lt;/P&gt;&lt;P&gt;542&amp;nbsp; %let oauth_nonce=kllo9940pd9333jh;&lt;/P&gt;&lt;P&gt;543&lt;/P&gt;&lt;P&gt;544&amp;nbsp; *Vars for oauth signature;&lt;/P&gt;&lt;P&gt;545&amp;nbsp; %let API_TIME_STAMP=%str(oauth_timestamp=&amp;amp;oauth_timestamp.);&lt;/P&gt;&lt;P&gt;546&amp;nbsp; %let API_NONCE=%str(oauth_nonce=&amp;amp;oauth_nonce.);&lt;/P&gt;&lt;P&gt;547&amp;nbsp; %let API_KEY=%str(oauth_consumer_key=&amp;amp;oauth_consumer_key.);&lt;/P&gt;&lt;P&gt;548&amp;nbsp; %let API_SECRET=%str(oauth_consumer_secret=&amp;amp;oauth_consumer_secret.);&lt;/P&gt;&lt;P&gt;549&amp;nbsp; %let API_METHOD=%str(oauth_signature_method=&amp;amp;oauth_signature_method.);&lt;/P&gt;&lt;P&gt;550&amp;nbsp; %let API_TOKEN=%str(oauth_token=&amp;amp;oauth_token.);&lt;/P&gt;&lt;P&gt;551&amp;nbsp; %let API_VERSION=%str(oauth_version=1.0);&lt;/P&gt;&lt;P&gt;552&amp;nbsp; %let API_SIZE=%str(size=&amp;amp;oauth_size.);&lt;/P&gt;&lt;P&gt;553&amp;nbsp; %LET API_FILE=%str(file=&amp;amp;oauth_file.);&lt;/P&gt;&lt;P&gt;554&amp;nbsp; %let API_CONSUMER_SECRET=%sysfunc(urlencode(&amp;amp;oauth_consumer_secret.));&lt;/P&gt;&lt;P&gt;555&amp;nbsp; %let API_TOKEN_SECRET=%sysfunc(urlencode(&amp;amp;oauth_token_secret.));&lt;/P&gt;&lt;P&gt;556&lt;/P&gt;&lt;P&gt;557&amp;nbsp; %let&lt;/P&gt;&lt;P&gt;557! string=&amp;amp;API_FILE.%str(&amp;amp;)&amp;amp;API_KEY.%str(&amp;amp;)&amp;amp;API_NONCE.%str(&amp;amp;)&amp;amp;API_METHOD.%str(&amp;amp;)&amp;amp;API_TIME_STAMP.%str&lt;/P&gt;&lt;P&gt;557! (&amp;amp;)&amp;amp;API_TOKEN.%str(&amp;amp;)&amp;amp;API_VERSION.%str(&amp;amp;)&amp;amp;API_SIZE.;&lt;/P&gt;&lt;P&gt;558&amp;nbsp; %let message=%str(GET)%str(&amp;amp;)&amp;amp;url.%str(&amp;amp;)%sysfunc(urlencode(&amp;amp;string.));&lt;/P&gt;&lt;P&gt;559&amp;nbsp; %put &amp;amp;message.;&lt;/P&gt;&lt;P&gt;GET&amp;amp;http%3A%2F%2Fphotos.example.net%2Fphotos&amp;amp;file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-&lt;/P&gt;&lt;P&gt;SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal&lt;/P&gt;&lt;P&gt;560&lt;/P&gt;&lt;P&gt;561&amp;nbsp; %let key=&amp;amp;API_CONSUMER_SECRET.%str(&amp;amp;)&amp;amp;API_TOKEN_SECRET.;&lt;/P&gt;&lt;P&gt;562&amp;nbsp; %put &amp;amp;key;&lt;/P&gt;&lt;P&gt;kd94hf93k423kf44&amp;amp;pfkkdhi9sl3r4s00&lt;/P&gt;&lt;P&gt;563&lt;/P&gt;&lt;P&gt;564&lt;/P&gt;&lt;P&gt;565&amp;nbsp; proc&lt;/P&gt;&lt;P&gt;565!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; groovy;&lt;/P&gt;&lt;P&gt;566&lt;/P&gt;&lt;P&gt;567&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; submit "&amp;amp;key." "&amp;amp;message.";&lt;/P&gt;&lt;P&gt;WARNING: The quoted string currently being processed has become more than 262 characters long.&amp;nbsp; You&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; might have unbalanced quotation marks.&lt;/P&gt;&lt;P&gt;568&lt;/P&gt;&lt;P&gt;569&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import javax.crypto.Mac&lt;/P&gt;&lt;P&gt;570&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; import javax.crypto.spec.SecretKeySpec&lt;/P&gt;&lt;P&gt;571&lt;/P&gt;&lt;P&gt;572&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def hmacsha1(key, message) {&lt;/P&gt;&lt;P&gt;573&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mac = Mac.getInstance("HmacSHA1")&lt;/P&gt;&lt;P&gt;574&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA1"))&lt;/P&gt;&lt;P&gt;575&lt;/P&gt;&lt;P&gt;576&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sha1_bytes = mac.doFinal(message.getBytes())&lt;/P&gt;&lt;P&gt;577&lt;/P&gt;&lt;P&gt;578&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new BigInteger(1, sha1_bytes).toString(16)&lt;/P&gt;&lt;P&gt;579&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;580&lt;/P&gt;&lt;P&gt;581&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exports.hmacsha1 = hmacsha1(args[0], args[1])&lt;/P&gt;&lt;P&gt;582&lt;/P&gt;&lt;P&gt;583&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endsubmit;&lt;/P&gt;&lt;P&gt;NOTE: Exporting macro variable "hmacsha1".&lt;/P&gt;&lt;P&gt;NOTE: The SUBMIT command completed.&lt;/P&gt;&lt;P&gt;584&lt;/P&gt;&lt;P&gt;585&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE GROOVY used (Total process time):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.01 seconds&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;586&lt;/P&gt;&lt;P&gt;587&amp;nbsp; %put &amp;amp;hmacsha1.;&lt;/P&gt;&lt;P&gt;b51dfe4f2f3594c79802bfc589dd2431361afd63&lt;/P&gt;&lt;P&gt;588&lt;/P&gt;&lt;P&gt;589&amp;nbsp; data _null_;&lt;/P&gt;&lt;P&gt;590&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oauth_signature = put("&amp;amp;hmacsha1.",$base64x32767.);&lt;/P&gt;&lt;P&gt;591&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput('oauth_signature',oauth_signature);&lt;/P&gt;&lt;P&gt;592&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: DATA statement used (Total process time):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;593&lt;/P&gt;&lt;P&gt;594&amp;nbsp; %put &amp;amp;oauth_signature.;&lt;/P&gt;&lt;P&gt;YjUxZGZlNGYyZjM1OTRjNzk4MDJiZmM1ODlkZDI0MzEzNjFhZmQ2Mw==&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 09:32:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169926#M32647</guid>
      <dc:creator>BillJones</dc:creator>
      <dc:date>2015-02-17T09:32:51Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169927#M32648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I would recommend you continue using the private Java runtime provided by your SAS installation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is because they are looking for the base64 encoding of the byte array, you are creating the base64 encoding of the hexadecimal representation of the byte Hmac-SHA1 digest.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;%let key = kd94hf93k423kf44&amp;amp;pfkkdhi9sl3r4s00;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;%let message = &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;GET&amp;amp;http%3A%2F%2Fphotos.example.net%2Fphotos&amp;amp;file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal&lt;/SPAN&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;proc groovy;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #0000ff; background-color: #ffffff;"&gt;add sasjar="commons_codec" version="1.7.0.0_SAS_20121211183158";*version may differ based on your installation.&amp;nbsp; Check your SAS Versioned Jar Repository;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;submit "&amp;amp;key." "&amp;amp;message.";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;import javax.crypto.Mac&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;import javax.crypto.spec.SecretKeySpec&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;import org.apache.commons.codec.binary.Base64&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;def base64hmacsha1(key, message) {&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mac = Mac.getInstance("HmacSHA1")&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA1"))&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sha1_bytes = mac.doFinal(message.getBytes())&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base64 = new Base64()&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new String(base64.encode(sha1_bytes))&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;exports.base64hmacsha1 = &lt;SPAN style="color: #ff0000;"&gt;base64&lt;/SPAN&gt;hmacsha1(args[0], args[1])&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;endsubmit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;quit;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;%put &amp;amp;&lt;SPAN style="color: #ff0000;"&gt;base64&lt;/SPAN&gt;hmacsha1.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;/*tR3+Ty81lMeYAr/Fid0kMTYa/WM=*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Message was edited by: FriedEgg - typo corrected in RED, also added reference for common-codec sasjar&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 16:57:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169927#M32648</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-02-17T16:57:29Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169928#M32649</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I added the classpath for the groovy-all.2.4.0.jar per your recommendation in another thread.&amp;nbsp;&amp;nbsp; However, now I'm getting a different type of error:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;334&amp;nbsp; dm 'clear log';&lt;/P&gt;&lt;P&gt;335&lt;/P&gt;&lt;P&gt;336&amp;nbsp; %let key = %nrstr(kd94hf93k423kf44&amp;amp;pfkkdhi9sl3r4s00);&lt;/P&gt;&lt;P&gt;337&amp;nbsp; %let message =&lt;/P&gt;&lt;P&gt;337! %nrstr(GET&amp;amp;http%3A%2F%2Fphotos.example.net%2Fphotos&amp;amp;file%3Dvacation.jpg%26oauth_consumer_key%3Ddp&lt;/P&gt;&lt;P&gt;337! f43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_time&lt;/P&gt;&lt;P&gt;337! stamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal);&lt;/P&gt;&lt;P&gt;338&lt;/P&gt;&lt;P&gt;339&lt;/P&gt;&lt;P&gt;340&amp;nbsp; proc&lt;/P&gt;&lt;P&gt;340!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; groovy;&lt;/P&gt;&lt;P&gt;341&lt;/P&gt;&lt;P&gt;342&amp;nbsp; add classpath="C:\Program Files (x86)\Groovy\Groovy-2.4.0\lib\groovy-all.2.4.0.jar";&lt;/P&gt;&lt;P&gt;NOTE: The ADD CLASSPATH command completed.&lt;/P&gt;&lt;P&gt;343&lt;/P&gt;&lt;P&gt;344&amp;nbsp; submit "&amp;amp;key." "&amp;amp;message.";&lt;/P&gt;&lt;P&gt;WARNING: The quoted string currently being processed has become more than 262 characters long.&amp;nbsp; You&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; might have unbalanced quotation marks.&lt;/P&gt;&lt;P&gt;345&lt;/P&gt;&lt;P&gt;346&amp;nbsp; import javax.crypto.Mac&lt;/P&gt;&lt;P&gt;347&amp;nbsp; import javax.crypto.spec.SecretKeySpec&lt;/P&gt;&lt;P&gt;348&amp;nbsp; import org.apache.commons.codec.binary.Base64&lt;/P&gt;&lt;P&gt;349&lt;/P&gt;&lt;P&gt;350&amp;nbsp; def base64hmacsha1(key, message) {&lt;/P&gt;&lt;P&gt;351&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mac = Mac.getInstance("HmacSHA1")&lt;/P&gt;&lt;P&gt;352&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA1"))&lt;/P&gt;&lt;P&gt;353&lt;/P&gt;&lt;P&gt;354&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sha1_bytes = mac.doFinal(message.getBytes())&lt;/P&gt;&lt;P&gt;355&lt;/P&gt;&lt;P&gt;356&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base64 = new Base64()&lt;/P&gt;&lt;P&gt;357&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new String(base64.encode(sha1_bytes))&lt;/P&gt;&lt;P&gt;358&amp;nbsp; }&lt;/P&gt;&lt;P&gt;359&lt;/P&gt;&lt;P&gt;360&lt;/P&gt;&lt;P&gt;361&amp;nbsp; exports.base64hmacsha1 = hmacsha1(args[0], args[1])&lt;/P&gt;&lt;P&gt;362&lt;/P&gt;&lt;P&gt;363&lt;/P&gt;&lt;P&gt;364&amp;nbsp; endsubmit;&lt;/P&gt;&lt;P&gt;groovy.lang.MissingMethodException: No signature of method: Script10.hmacsha1() is applicable for&lt;/P&gt;&lt;P&gt;argument types: (java.lang.String, java.lang.String) values: [kd94hf93k423kf44&amp;amp;pfkkdhi9sl3r4s00,&lt;/P&gt;&lt;P&gt;GET&amp;amp;http%3A%2F%2Fphotos.example.net%2Fphotos&amp;amp;file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l&lt;/P&gt;&lt;P&gt;03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D119124209&lt;/P&gt;&lt;P&gt;6%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:54)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:143)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:155)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at Script10.run(Script10.groovy:17)&lt;/P&gt;&lt;P&gt;ERROR: The SUBMIT command failed.&lt;/P&gt;&lt;P&gt;365&lt;/P&gt;&lt;P&gt;366&lt;/P&gt;&lt;P&gt;367&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE GROOVY used (Total process time):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.03 seconds&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference HMACSHA1 not resolved.&lt;/P&gt;&lt;P&gt;368&amp;nbsp; %put &amp;amp;hmacsha1.;&lt;/P&gt;&lt;P&gt;&amp;amp;hmacsha1.&lt;/P&gt;&lt;P&gt;369&amp;nbsp; /*tR3+Ty81lMeYAr/Fid0kMTYa/WM=*/&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 21:22:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169928#M32649</guid>
      <dc:creator>BillJones</dc:creator>
      <dc:date>2015-02-17T21:22:20Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169929#M32650</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I did not test that posting and missed replacing the method call with the proper name.&amp;nbsp; You should be good now.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 21:32:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169929#M32650</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-02-17T21:32:00Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169930#M32651</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Success!&amp;nbsp; Thanks so very much for your time and help with this.&amp;nbsp; I've tried numerous different ways to generate the oauth_signature.&amp;nbsp; Finally, I found a solution that works with sas.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Bill&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 21:52:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169930#M32651</guid>
      <dc:creator>BillJones</dc:creator>
      <dc:date>2015-02-17T21:52:26Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169931#M32652</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If you are having issues with the commons-codec you can use the version that should be included in your sas versioned jar repository using a statement similar to the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;add sasjar="commons_codec" version="1.7.0.0_SAS_20121211183158";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The version will be specific to your installation.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 21:59:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169931#M32652</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-02-17T21:59:48Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169932#M32653</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have created a gist containing the various PROC GROOVY codes shared in this post.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://gist.github.com/FriedEgg/79ad315afa1b315e8ac3" title="https://gist.github.com/FriedEgg/79ad315afa1b315e8ac3"&gt;Using PROC GROOVY in SAS to Calculate Hash Digests&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 22:17:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169932#M32653</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-02-17T22:17:15Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169933#M32654</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;@BillJones,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Glad it work out for you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 22:18:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169933#M32654</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-02-17T22:18:39Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169934#M32655</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks!&amp;nbsp; I just realized that I need the commons-codec and not the &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;groovy-all.2.4.0.jar.&amp;nbsp; I used the explicit classpath syntax to get the code to run.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;add classpath="C:\Program Files (x86)\Groovy\Groovy-2.4.0\lib\commons-codec-1.10.jar";&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Works perfectly now.&amp;nbsp; Truly appreciate your expertise and help.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2015 22:21:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169934#M32655</guid>
      <dc:creator>BillJones</dc:creator>
      <dc:date>2015-02-17T22:21:56Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169935#M32656</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Firstly apologies if this is the wrong place to post...first time I've used this!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you for posting the code above - it's really helped me.&amp;nbsp; I'm trying to SHA1 encode entries in a file, but I can't find a way of incorporating the code into a macro and thus can only do one at a time using the code you provided below.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select mskey, emailcode&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into :mskey, :emailcode&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from trust;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;%let toHash=&amp;amp;mskey&amp;amp;emailcode;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc groovy;&lt;/P&gt;&lt;P&gt;submit "&amp;amp;toHash.";&lt;/P&gt;&lt;P&gt;import java.security.MessageDigest&lt;/P&gt;&lt;P&gt;exports.sha1 = new BigInteger(1, MessageDigest.getInstance("SHA1").digest(args[0].getBytes())).toString(16)&lt;/P&gt;&lt;P&gt;endsubmit;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put &amp;amp;toHash;&lt;/P&gt;&lt;P&gt;%put &amp;amp;sha1.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When I try and incorporate in a macro it mentions that the submit block cannot be directly placed in a macro.&amp;nbsp; Instead, place the submit block into a file first and then use %include to include the file within a macro definition.&amp;nbsp; Sorry, my coding is not good enough to make this work &lt;img id="smileysad" class="emoticon emoticon-smileysad" src="https://communities.sas.com/i/smilies/16x16_smiley-sad.png" alt="Smiley Sad" title="Smiley Sad" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any help would be much appreciated!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 May 2015 09:05:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169935#M32656</guid>
      <dc:creator>NG_Forest</dc:creator>
      <dc:date>2015-05-20T09:05:45Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169936#M32657</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;@NG_Forest,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It would be best to create a new post for you question as SHA1 and HMAC-SHA1 are significantly different topics.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, I have posted on this subject previously, it does not use PROC GROOVY, as it did not exist at the time (the code in this post could be adapted to use is though):&lt;/P&gt;&lt;P&gt;&lt;A __default_attr="119160" __jive_macro_name="message" class="jive_macro jive_macro_message" href="https://communities.sas.com/"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Using a macro to perform this type of task on every record in a file is really less than ideal.&amp;nbsp; The better approach would be using the data step java object.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 May 2015 17:56:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169936#M32657</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-05-20T17:56:49Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169937#M32658</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;@FriedEgg,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for taking the time to respond and apologies for not starting a new post.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Once I have a Java compiler installed on my machine I'll certainly give your other method a go.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 May 2015 13:43:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169937#M32658</guid>
      <dc:creator>NG_Forest</dc:creator>
      <dc:date>2015-05-21T13:43:09Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169938#M32659</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;@NG_Forest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I updated the post to include a similar method using PROC GROOVY at the same link as above&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 May 2015 15:48:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169938#M32659</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-05-21T15:48:37Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169939#M32660</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;@FriedEgg,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Once again, thank you so much...it works perfectly &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 May 2015 16:06:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169939#M32660</guid>
      <dc:creator>NG_Forest</dc:creator>
      <dc:date>2015-05-21T16:06:54Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169940#M32661</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;FriedEgg,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again for your help.&amp;nbsp; I use the code you provided to generate oauth signatures, and everything works great with cURL.&amp;nbsp; However, when I try to use proc http, I keep getting signature invalid errors.&amp;nbsp; I'm attempting to query a website that has oauth 1.0.&amp;nbsp; I checked with the website admin, and they receive my post requests and state there are no issues with the parameters; Keys, header, &amp;amp; body are all fine.&amp;nbsp; Note the site is https but I updated my SAS config file to reference a cacert file, so I don't believe that's the issue.&amp;nbsp; Also, I triple checked my signatures, and they match the nouncer.com site.&amp;nbsp; (Again, I can query the website with cURL&amp;nbsp; &lt;SPAN style="font-size: 13.3333330154419px;"&gt;I want to use proc http because it should be faster.&lt;/SPAN&gt;)&amp;nbsp; It appears that proc http does something to the header, url, or body of my request such that the oauth signature becomes invalid.&amp;nbsp; Do you have any idea of what could be going on?&amp;nbsp; Also, is there a master document which has all the details of proc http?&amp;nbsp; I've read the online sas documentation, but was hoping for something more detailed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-Bill&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 28 Jun 2015 04:20:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169940#M32661</guid>
      <dc:creator>BillJones</dc:creator>
      <dc:date>2015-06-28T04:20:27Z</dc:date>
    </item>
    <item>
      <title>Re: Using sas/secure to generate hmac-sha1 oauth signature</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169941#M32662</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;PROC HTTP does set some header item itself, and manually setting the same header attributes yourself I have seen lead to problems.&amp;nbsp; The documentation for the procedure that you have found online is as in-depth as I have seen available anywhere (which is not very detailed).&amp;nbsp; I do not recall exactly what headers I have seen cause issues, but I am pretty sure one of the was the content-type.&amp;nbsp; I have not tried it, but the documentation for PROC SOAP hints that there are some jreotions you can set to receive additional debug logging for the httpclient.&amp;nbsp; I would try setting that up for your session and see if it can be helpful at all with PROC HTTP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#n1lvy6ht8ywii2n1jpwp3czll6no.htm" title="http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#n1lvy6ht8ywii2n1jpwp3czll6no.htm"&gt;http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#n1lvy6ht8ywii2n1jpwp3czll6no.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;the assumption is somewhat confirmed in the 9.4 documentation:&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/proc/67327/HTML/default/viewer.htm#n1hee3s3s3j9oxn1x6czzzdqsj4u.htm" title="http://support.sas.com/documentation/cdl/en/proc/67327/HTML/default/viewer.htm#n1hee3s3s3j9oxn1x6czzzdqsj4u.htm"&gt;http://support.sas.com/documentation/cdl/en/proc/67327/HTML/default/viewer.htm#n1hee3s3s3j9oxn1x6czzzdqsj4u.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There is also an option in PROC HTTP called VERBOSE, which I do not recall being in the documentation syntax?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have scripts running frequently using a hmac-sha1 authentication schemes daily, through PROC HTTP, so I know at the very least, I know it's possible (even on some of the servers still running 9.2).&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 28 Jun 2015 04:59:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-sas-secure-to-generate-hmac-sha1-oauth-signature/m-p/169941#M32662</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2015-06-28T04:59:55Z</dc:date>
    </item>
  </channel>
</rss>

