| 
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -4,6 +4,7 @@ package modhex | 
															
														
														
													
														
															
																 | 
																 | 
																import ( | 
																 | 
																 | 
																import ( | 
															
														
														
													
														
															
																 | 
																 | 
																	"errors" | 
																 | 
																 | 
																	"errors" | 
															
														
														
													
														
															
																 | 
																 | 
																	"fmt" | 
																 | 
																 | 
																	"fmt" | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	"strings" | 
															
														
														
													
														
															
																 | 
																 | 
																) | 
																 | 
																 | 
																) | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																const modhexTable = "cbdefghijklnrtuv" | 
																 | 
																 | 
																const modhexTable = "cbdefghijklnrtuv" | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -24,20 +25,31 @@ func EncodedLen(n int) int { | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																// Encode encodes src into EncodedLen(len(src)) bytes of dst.
 | 
																 | 
																 | 
																// Encode encodes src into EncodedLen(len(src)) bytes of dst.
 | 
															
														
														
													
														
															
																 | 
																 | 
																// It returns the number of bytes written to dst, but this is
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																// always EncodedLen(len(src)).
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																// Encode implements modhex encoding.
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																//
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// Encode returns the number of bytes written to dst, but this is always
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// EncodedLen(len(src)).
 | 
															
														
														
													
														
															
																 | 
																 | 
																func Encode(dst, src []byte) int { | 
																 | 
																 | 
																func Encode(dst, src []byte) int { | 
															
														
														
													
														
															
																 | 
																 | 
																	i := 0 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// keep track of the number of bytes written to dst
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	len := 0 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// convert each byte of src and store in dst
 | 
															
														
														
													
														
															
																 | 
																 | 
																	for _, v := range src { | 
																 | 
																 | 
																	for _, v := range src { | 
															
														
														
													
														
															
																 | 
																 | 
																		dst[i] = modhexTable[v>>4] | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		dst[i+1] = modhexTable[v&0x0f] | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		i += 2 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		// convert the upper nibble to modhex
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		// and store it into dst
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		dst[len] = modhexTable[v>>4] | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		len++ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		// convert the lower nibble to modhex
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		// and store it into dst
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		dst[len] = modhexTable[v&0x0f] | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		len++ | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																	return len(src) * 2 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// return the number of bytes written
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	return len | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																// EncodeToString returns the modhex encoding of src.
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// EncodeToString returns the modhex encoding of src as a string.
 | 
															
														
														
													
														
															
																 | 
																 | 
																func EncodeToString(src []byte) string { | 
																 | 
																 | 
																func EncodeToString(src []byte) string { | 
															
														
														
													
														
															
																 | 
																 | 
																	// make a new slice to hold the encoded bytes
 | 
																 | 
																 | 
																	// make a new slice to hold the encoded bytes
 | 
															
														
														
													
														
															
																 | 
																 | 
																	dst := make([]byte, EncodedLen(len(src))) | 
																 | 
																 | 
																	dst := make([]byte, EncodedLen(len(src))) | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -58,10 +70,9 @@ func DecodedLen(n int) int { | 
															
														
														
													
														
															
																 | 
																 | 
																// Decode decodes src into DecodedLen(len(src)) bytes, returning
 | 
																 | 
																 | 
																// Decode decodes src into DecodedLen(len(src)) bytes, returning
 | 
															
														
														
													
														
															
																 | 
																 | 
																// the actual number of bytes written to dst.
 | 
																 | 
																 | 
																// the actual number of bytes written to dst.
 | 
															
														
														
													
														
															
																 | 
																 | 
																//
 | 
																 | 
																 | 
																//
 | 
															
														
														
													
														
															
																 | 
																 | 
																// Decode expects that src contains only modhex characters and that
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																// src has an even length.
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																// If the input is malformed, Decode returns the number
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																// of bytes decoded before the error.
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// Decode expects that src contains only modhex characters and that src has an
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// even length. If the input is malformed, Decode returns the number of bytes
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// decoded before the error.
 | 
															
														
														
													
														
															
																 | 
																 | 
																func Decode(dst, src []byte) (int, error) { | 
																 | 
																 | 
																func Decode(dst, src []byte) (int, error) { | 
															
														
														
													
														
															
																 | 
																 | 
																	i, j := 0, 1 | 
																 | 
																 | 
																	i, j := 0, 1 | 
															
														
														
													
														
															
																 | 
																 | 
																	for ; j < len(src); j += 2 { | 
																 | 
																 | 
																	for ; j < len(src); j += 2 { | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -90,13 +101,15 @@ func Decode(dst, src []byte) (int, error) { | 
															
														
														
													
														
															
																 | 
																 | 
																	return i, nil | 
																 | 
																 | 
																	return i, nil | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																// DecodeString returns the bytes represesented by the modhex string s.
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// DecodeString returns the bytes represented by the modhex string s.
 | 
															
														
														
													
														
															
																 | 
																 | 
																//
 | 
																 | 
																 | 
																//
 | 
															
														
														
													
														
															
																 | 
																 | 
																// Decode expects that s contains only modhex characters and that s
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																// has an even length.
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																// If the input is malformed, Decode returns the number
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																// of bytes decoded before the error.
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// DecodeString expects that s contains only modhex characters and that s
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// has an even length. If the input is malformed, DecodeString returns the
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																// number of bytes decoded before the error.
 | 
															
														
														
													
														
															
																 | 
																 | 
																func DecodeString(s string) ([]byte, error) { | 
																 | 
																 | 
																func DecodeString(s string) ([]byte, error) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// convert the string to lower case since the map uses lower case
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	s = strings.ToLower(s) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	// convert the input string to an array of bytes
 | 
																 | 
																 | 
																	// convert the input string to an array of bytes
 | 
															
														
														
													
														
															
																 | 
																 | 
																	src := []byte(s) | 
																 | 
																 | 
																	src := []byte(s) | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																	
																 | 
																
  |