From a179e5fc979cf752da8a3605739d7c43af5bb71c Mon Sep 17 00:00:00 2001
From: neil <git@byneil.com>
Date: Tue, 26 Jan 2016 00:00:09 +0800
Subject: [PATCH] h2b: my own hex to bin.  remove dependency to xxd tool

---
 le.sh | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/le.sh b/le.sh
index ef3b0388..1a635a32 100755
--- a/le.sh
+++ b/le.sh
@@ -43,6 +43,21 @@ _err() {
   fi
 }
 
+_h2b() {
+  hex=$(cat)
+  i=1
+  j=2
+  while [ '1' ] ; do
+    h=$(printf $hex | cut -c $i-$j)
+    if [ -z "$h" ] ; then
+      break;
+    fi
+    printf "\x$h"
+    let "i+=2"
+    let "j+=2"
+  done
+}
+
 #domain [2048]  
 createAccountKey() {
   if [ -z "$1" ] ; then
@@ -506,11 +521,11 @@ issue() {
   fi
   _debug pub_exp "$pub_exp"
   
-  e=$(echo $pub_exp | xxd -r -p | base64)
+  e=$(echo $pub_exp | _h2b | base64)
   _debug e "$e"
   
   modulus=$(openssl rsa -in $ACCOUNT_KEY_PATH -modulus -noout | cut -d '=' -f 2 )
-  n=$(echo $modulus| xxd -r -p | base64 -w 0 | _b64 )
+  n=$(echo $modulus| _h2b | base64 -w 0 | _b64 )
 
   jwk='{"e": "'$e'", "kty": "RSA", "n": "'$n'"}'
   
@@ -519,7 +534,7 @@ issue() {
   _debug HEADER "$HEADER"
   
   accountkey_json=$(echo -n "$jwk" | sed "s/ //g")
-  thumbprint=$(echo -n "$accountkey_json" | sha256sum | xxd -r -p | base64 -w 0 | _b64)
+  thumbprint=$(echo -n "$accountkey_json" | sha256sum | _h2b | base64 -w 0 | _b64)
   
   
   _info "Registering account"
@@ -592,7 +607,7 @@ issue() {
         dnsadded='0'
         txtdomain="_acme-challenge.$d"
         _debug txtdomain "$txtdomain"
-        txt="$(echo -e -n $keyauthorization | sha256sum | xxd -r -p | base64 -w 0 | _b64)"
+        txt="$(echo -e -n $keyauthorization | sha256sum | _h2b | base64 -w 0 | _b64)"
         _debug txt "$txt"
         #dns
         #1. check use api
@@ -935,12 +950,6 @@ install() {
     _err "CentOs: yum -y install openssl"
     return 1
   fi
-  
-  if ! command -v "xxd" > /dev/null ; then
-    _err "Please install xxd first."
-    _err "CentOs: yum install vim-common"
-    return 1
-  fi
 
   _info "Installing to $WORKING_DIR"