Re: [Nix-dev] Convert sha1 from base64 into "normal" string

2016-10-13 Thread zimbatm
Ah right, fetchurl also supports some non-standard base32 format but not
base64. Nice hack thought :)

On Thu, 13 Oct 2016, 09:24 Игорь Пашев,  wrote:

> 2016-10-13 10:21 GMT+03:00 zimbatm :
> > My understanding of fetchurl is that the hash can be both in hex and
> base64
> > formats no?
>
>
> No :-) It probably should be extended to support base64. And/or base64
> support should be in the library, or in nix builtins. But at this time
> I can't wait.
>
___
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev


Re: [Nix-dev] Convert sha1 from base64 into "normal" string

2016-10-13 Thread Игорь Пашев
2016-10-13 10:21 GMT+03:00 zimbatm :
> My understanding of fetchurl is that the hash can be both in hex and base64
> formats no?


No :-) It probably should be extended to support base64. And/or base64
support should be in the library, or in nix builtins. But at this time
I can't wait.
___
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev


Re: [Nix-dev] Convert sha1 from base64 into "normal" string

2016-10-13 Thread zimbatm
I'm still wondering :)

My understanding of fetchurl is that the hash can be both in hex and base64
formats no?

On Wed, 12 Oct 2016, 23:36 Tomasz Czyż,  wrote:

> Interesting stuff, thanks for sharing.
>
> 2016-10-11 20:28 GMT+01:00 Игорь Пашев :
>
> You must be wondering why :-)
>
>
> https://github.com/zalora/nixsap/commit/592dee8bef92debede3724bf5ddbf8249c30c488
> ___
> nix-dev mailing list
> nix-dev@lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>
>
>
>
> --
> Tomasz Czyż
> ___
> nix-dev mailing list
> nix-dev@lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>
___
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev


Re: [Nix-dev] Convert sha1 from base64 into "normal" string

2016-10-12 Thread Tomasz Czyż
Interesting stuff, thanks for sharing.

2016-10-11 20:28 GMT+01:00 Игорь Пашев :

> You must be wondering why :-)
>
> https://github.com/zalora/nixsap/commit/592dee8bef92debede3724bf5ddbf8
> 249c30c488
> ___
> nix-dev mailing list
> nix-dev@lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>



-- 
Tomasz Czyż
___
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev


Re: [Nix-dev] Convert sha1 from base64 into "normal" string

2016-10-11 Thread Игорь Пашев
You must be wondering why :-)

https://github.com/zalora/nixsap/commit/592dee8bef92debede3724bf5ddbf8249c30c488
___
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev


Re: [Nix-dev] Convert sha1 from base64 into "normal" string

2016-10-11 Thread Игорь Пашев
Updated to fix padding
https://gist.github.com/ip1981/35b660779ad6935338ca5d09bc2f9fca

strBase64:

let

  inherit (builtins)
concatStringsSep genList stringLength substring trace ;

  base64 = {
# n=0; for l in {A..Z} {a..z} {0..9} + /; do printf '"%s" = %2s; '
$l $n; (( n++ )); (( n % 8 )) || echo; done
"A" =  0; "B" =  1; "C" =  2; "D" =  3; "E" =  4; "F" =  5; "G" =
6; "H" =  7;
"I" =  8; "J" =  9; "K" = 10; "L" = 11; "M" = 12; "N" = 13; "O" =
14; "P" = 15;
"Q" = 16; "R" = 17; "S" = 18; "T" = 19; "U" = 20; "V" = 21; "W" =
22; "X" = 23;
"Y" = 24; "Z" = 25; "a" = 26; "b" = 27; "c" = 28; "d" = 29; "e" =
30; "f" = 31;
"g" = 32; "h" = 33; "i" = 34; "j" = 35; "k" = 36; "l" = 37; "m" =
38; "n" = 39;
"o" = 40; "p" = 41; "q" = 42; "r" = 43; "s" = 44; "t" = 45; "u" =
46; "v" = 47;
"w" = 48; "x" = 49; "y" = 50; "z" = 51; "0" = 52; "1" = 53; "2" =
54; "3" = 55;
"4" = 56; "5" = 57; "6" = 58; "7" = 59; "8" = 60; "9" = 61; "+" =
62; "/" = 63;
  };

  quartet_to_int24 = q:
# https://en.wikipedia.org/wiki/Base64
let
  s = n: assert (stringLength q == 4); substring (3 - n) 1 q;
  d = n: base64.${s n};
in if s 0 != "=" then
64 * (64 * (64 * (d 3) + (d 2)) + (d 1)) + (d 0)
  else if s 1 != "=" then
64 * (64 * (64 * (d 3) + (d 2)) + (d 1)) / 256 # right shift by 8 bits
  else
64 * (64 * (64 * (d 3) + (d 2))) / 65536 # right shift by 16 bits
  ;

  int24_to_hex = i: # 16777215 (0xFF, 2^24-1) max
let
  hex = "0123456789abcdef";
  toHex = n:
let
  d = n / 16;
  r = n - 16 * d;
in "${if d != 0 then toHex d else ""}${substring r 1 hex}";
in assert (0 <= i && i <= 16777215); toHex i;

  quartets = s:
let
  l = stringLength s;
  h = substring 0 4 s;
  t = substring 4 (l - 4) s;
in [h] ++ (if t != "" then quartets t else []);


  quartet_to_hex = q: # base64 quartet into hex with padding
let
  i = quartet_to_int24 q;
  h = int24_to_hex i;
  s = if substring 2 1 q == "=" then 1
  else if substring 3 1 q == "=" then 2
  else 3; # number of bytes
  w = s * 2; # number of hexadecimal digits
  filler = concatStringsSep "" (genList (_: "0") (w - stringLength h));
in "${filler}${h}";

/*

  FIXME: usage of library functions like concatMapString
  causes very cryptic errors:

  # nix-instantiate --eval --expr 'import ./fromBase64.nix
"kjOzmCPxyw0bPciMsGSh5q+bT9g="' --show-trace
  error: while evaluating anonymous function at
.../fromBase64.nix:1:1, called from (string):1:18:
  value is a function while a set was expected, at .../fromBase64.nix:3:4

*/

in concatStringsSep "" (map quartet_to_hex (quartets strBase64))


2016-10-11 14:53 GMT+03:00 Игорь Пашев :
> Draft:
>
> # nix-instantiate --eval --expr 'import ./fromBase64.nix
> "kjOzmCPxyw0bPciMsGSh5q+bT9g=" ==
> "9233b39823f1cb0d1b3dc88cb064a1e6af9b4fd8"' --show-trace
> true
>
> ./fromBase64.nix:
>
>
> strBase64:
>
> let
>
>   inherit (builtins) concatStringsSep stringLength substring ;
>
>   base64 = {
> # n=0; for l in {A..Z} {a..z} {0..9} + /; do printf '"%s" = %2s; '
> $l $n; (( n++ )); (( n % 8 )) || echo; done
> "A" =  0; "B" =  1; "C" =  2; "D" =  3; "E" =  4; "F" =  5; "G" =
> 6; "H" =  7;
> "I" =  8; "J" =  9; "K" = 10; "L" = 11; "M" = 12; "N" = 13; "O" =
> 14; "P" = 15;
> "Q" = 16; "R" = 17; "S" = 18; "T" = 19; "U" = 20; "V" = 21; "W" =
> 22; "X" = 23;
> "Y" = 24; "Z" = 25; "a" = 26; "b" = 27; "c" = 28; "d" = 29; "e" =
> 30; "f" = 31;
> "g" = 32; "h" = 33; "i" = 34; "j" = 35; "k" = 36; "l" = 37; "m" =
> 38; "n" = 39;
> "o" = 40; "p" = 41; "q" = 42; "r" = 43; "s" = 44; "t" = 45; "u" =
> 46; "v" = 47;
> "w" = 48; "x" = 49; "y" = 50; "z" = 51; "0" = 52; "1" = 53; "2" =
> 54; "3" = 55;
> "4" = 56; "5" = 57; "6" = 58; "7" = 59; "8" = 60; "9" = 61; "+" =
> 62; "/" = 63;
>   };
>
>   quartet_to_int24 = q:
> # https://en.wikipedia.org/wiki/Base64
> let
>   s = n: assert (stringLength q == 4); substring (3 - n) 1 q;
>   d = n: base64.${s n};
> in if s 0 != "=" then
> 64 * (64 * (64 * (d 3) + (d 2)) + (d 1)) + (d 0)
>   else if s 1 != "=" then
> 64 * (64 * (64 * (d 3) + (d 2)) + (d 1)) / 256 # right shift by 8 bits
>   else
> 64 * (64 * (64 * (d 3) + (d 2))) / 65536 # right shift by 16 bits
>   ;
>
>   int24_to_hex = i: # 16777215 (0xFF, 2^24-1) max
> let
>   hex = "0123456789abcdef";
>   toHex = n:
> let
>   d = n / 16;
>   r = n - 16 * d;
> in "${if d != 0 then toHex d else ""}${substring r 1 hex}";
> in assert (0 <= i && i <= 16777215); toHex i;
>
>   quartets = s:
> let
>   l = stringLength s;
>   h = substring 0 4 s;
>   t = substring 4 (l - 4) s;
> in [h] ++ (if t != "" then quartets t else []);
>
> /*
>
>   FIXME: usage of library functions like concatMapString
>   causes very cryptic 

Re: [Nix-dev] Convert sha1 from base64 into "normal" string

2016-10-11 Thread Игорь Пашев
Draft:

# nix-instantiate --eval --expr 'import ./fromBase64.nix
"kjOzmCPxyw0bPciMsGSh5q+bT9g=" ==
"9233b39823f1cb0d1b3dc88cb064a1e6af9b4fd8"' --show-trace
true

./fromBase64.nix:


strBase64:

let

  inherit (builtins) concatStringsSep stringLength substring ;

  base64 = {
# n=0; for l in {A..Z} {a..z} {0..9} + /; do printf '"%s" = %2s; '
$l $n; (( n++ )); (( n % 8 )) || echo; done
"A" =  0; "B" =  1; "C" =  2; "D" =  3; "E" =  4; "F" =  5; "G" =
6; "H" =  7;
"I" =  8; "J" =  9; "K" = 10; "L" = 11; "M" = 12; "N" = 13; "O" =
14; "P" = 15;
"Q" = 16; "R" = 17; "S" = 18; "T" = 19; "U" = 20; "V" = 21; "W" =
22; "X" = 23;
"Y" = 24; "Z" = 25; "a" = 26; "b" = 27; "c" = 28; "d" = 29; "e" =
30; "f" = 31;
"g" = 32; "h" = 33; "i" = 34; "j" = 35; "k" = 36; "l" = 37; "m" =
38; "n" = 39;
"o" = 40; "p" = 41; "q" = 42; "r" = 43; "s" = 44; "t" = 45; "u" =
46; "v" = 47;
"w" = 48; "x" = 49; "y" = 50; "z" = 51; "0" = 52; "1" = 53; "2" =
54; "3" = 55;
"4" = 56; "5" = 57; "6" = 58; "7" = 59; "8" = 60; "9" = 61; "+" =
62; "/" = 63;
  };

  quartet_to_int24 = q:
# https://en.wikipedia.org/wiki/Base64
let
  s = n: assert (stringLength q == 4); substring (3 - n) 1 q;
  d = n: base64.${s n};
in if s 0 != "=" then
64 * (64 * (64 * (d 3) + (d 2)) + (d 1)) + (d 0)
  else if s 1 != "=" then
64 * (64 * (64 * (d 3) + (d 2)) + (d 1)) / 256 # right shift by 8 bits
  else
64 * (64 * (64 * (d 3) + (d 2))) / 65536 # right shift by 16 bits
  ;

  int24_to_hex = i: # 16777215 (0xFF, 2^24-1) max
let
  hex = "0123456789abcdef";
  toHex = n:
let
  d = n / 16;
  r = n - 16 * d;
in "${if d != 0 then toHex d else ""}${substring r 1 hex}";
in assert (0 <= i && i <= 16777215); toHex i;

  quartets = s:
let
  l = stringLength s;
  h = substring 0 4 s;
  t = substring 4 (l - 4) s;
in [h] ++ (if t != "" then quartets t else []);

/*

  FIXME: usage of library functions like concatMapString
  causes very cryptic errors:

  # nix-instantiate --eval --expr 'import ./fromBase64.nix
"kjOzmCPxyw0bPciMsGSh5q+bT9g="' --show-trace
  error: while evaluating anonymous function at
.../fromBase64.nix:1:1, called from (string):1:18:
  value is a function while a set was expected, at .../fromBase64.nix:3:4

*/

in concatStringsSep "" (map (x: int24_to_hex (quartet_to_int24 x))
(quartets strBase64))

2016-10-07 16:35 GMT+03:00 Игорь Пашев :
> Hi all.
>
> What options are there to convert a base64-encoded raw binary data
> into "normal" hexadecimal string in Nix (during evalutation)?
>
> E. i. "kjOzmCPxyw0bPciMsGSh5q+bT9g=" ->
> "9233b39823f1cb0d1b3dc88cb064a1e6af9b4fd8"
>
> to make it valid input for fetchurl, etc.
___
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev


[Nix-dev] Convert sha1 from base64 into "normal" string

2016-10-07 Thread Игорь Пашев
Hi all.

What options are there to convert a base64-encoded raw binary data
into "normal" hexadecimal string in Nix (during evalutation)?

E. i. "kjOzmCPxyw0bPciMsGSh5q+bT9g=" ->
"9233b39823f1cb0d1b3dc88cb064a1e6af9b4fd8"

to make it valid input for fetchurl, etc.
___
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev