All pastes #465969 Raw Edit

Unnamed

public text v1 · immutable
#465969 ·published 2007-04-30 18:59 UTC
rendered paste body
int DecodeStarcraftKey( char *key) {
  unsigned long  /*r*/n, n2, v, v2/*, keyvalue*/;
  char /*c1, */c2, c;
  int bValid;
  int i;

  v = 3;
  for (i = 0; i < 12; i++) {
    c = key[i];
    n = Get_Num_Value(c);
    n2 = v * 2;
    n ^= n2;
    v += n;
  }

  v %= 10;
  if (Get_Hex_Value(v) == key[12])
    bValid = 0;
  else
    bValid = -1;

  v = 194;
  for (i = 11; /*v >= 7,*/ i >= 0; i--) {
    c = key[i];
    n = v / 12;
    n2 = v % 12;
    v -= 17;
    c2 = key[n2];
    key[i] = c2;
    key[n2] = c;
  }

  v2 = 0x13AC9741;
  for (i = 11; i >= 0; i--) {
    c = toupper(key[i]);
    key[i] = c;
    if (c <= '7') {
      v = v2;
      c2 = v & 0xFF;
      c2 &= 7;
      c2 ^= c;
      v >>= 3;
      key[i] = c2;
      v2 = v;
    } else if (c < 'A') {
      c2 = (unsigned char) i;
      c2 &= 1;
      c2 ^= c;
      key[i] = c2;
    }
  }
  return bValid;
}


char Get_Hex_Value( unsigned long v) {
  v &= 0xF;
  if (v < 10)
    return (v + 0x30);
  else
    return (v + 0x37);
}

int Get_Num_Value( char c) {
  c = toupper(c);
  if (isdigit(c))
    return (c - 0x30);
  else
    return (c - 0x37);
}