18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Utility program for generating entries in /etc/ppp/srp-secrets 38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (c) 2001 by Sun Microsystems, Inc. 58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * All rights reserved. 68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Non-exclusive rights to redistribute, modify, translate, and use 88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * this software in source and binary forms, in whole or in part, is 98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * hereby granted, provided that the above copyright notice is 108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * duplicated in any source form, and that neither the name of the 118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * copyright holder nor the author is used to endorse or promote 128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * products derived from this software. 138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Original version by James Carlson 198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Usage: 218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * srp-entry [-i index] [clientname] 228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Index, if supplied, is the modulus/generator index from 248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * /etc/tpasswd.conf. If not supplied, then the last (highest 258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * numbered) entry from that file is used. If the file doesn't exist, 268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * then the default "well known" EAP SRP-SHA1 modulus/generator is 278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * used. 288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * The default modulus/generator can be requested as index 0. 308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <stdio.h> 338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <stdlib.h> 348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <unistd.h> 358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <string.h> 368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <ctype.h> 378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <t_pwd.h> 388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#ifndef SOL2 408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define getpassphrase getpass 418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#endif 428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define HAS_SPACE 1 448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define HAS_DQUOTE 2 458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define HAS_SQUOTE 4 468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define HAS_BACKSLASH 8 478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic const u_char wkmodulus[] = { 498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xAC, 0x6B, 0xDB, 0x41, 0x32, 0x4A, 0x9A, 0x9B, 508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xF1, 0x66, 0xDE, 0x5E, 0x13, 0x89, 0x58, 0x2F, 518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xAF, 0x72, 0xB6, 0x65, 0x19, 0x87, 0xEE, 0x07, 528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xFC, 0x31, 0x92, 0x94, 0x3D, 0xB5, 0x60, 0x50, 538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xA3, 0x73, 0x29, 0xCB, 0xB4, 0xA0, 0x99, 0xED, 548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x81, 0x93, 0xE0, 0x75, 0x77, 0x67, 0xA1, 0x3D, 558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xD5, 0x23, 0x12, 0xAB, 0x4B, 0x03, 0x31, 0x0D, 568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xCD, 0x7F, 0x48, 0xA9, 0xDA, 0x04, 0xFD, 0x50, 578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xE8, 0x08, 0x39, 0x69, 0xED, 0xB7, 0x67, 0xB0, 588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xCF, 0x60, 0x95, 0x17, 0x9A, 0x16, 0x3A, 0xB3, 598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x66, 0x1A, 0x05, 0xFB, 0xD5, 0xFA, 0xAA, 0xE8, 608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x29, 0x18, 0xA9, 0x96, 0x2F, 0x0B, 0x93, 0xB8, 618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x55, 0xF9, 0x79, 0x93, 0xEC, 0x97, 0x5E, 0xEA, 628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xA8, 0x0D, 0x74, 0x0A, 0xDB, 0xF4, 0xFF, 0x74, 638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x73, 0x59, 0xD0, 0x41, 0xD5, 0xC3, 0x3E, 0xA7, 648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x1D, 0x28, 0x1E, 0x44, 0x6B, 0x14, 0x77, 0x3B, 658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xCA, 0x97, 0xB4, 0x3A, 0x23, 0xFB, 0x80, 0x16, 668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x76, 0xBD, 0x20, 0x7A, 0x43, 0x6C, 0x64, 0x81, 678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xF1, 0xD2, 0xB9, 0x07, 0x87, 0x17, 0x46, 0x1A, 688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x5B, 0x9D, 0x32, 0xE6, 0x88, 0xF8, 0x77, 0x48, 698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x54, 0x45, 0x23, 0xB5, 0x24, 0xB0, 0xD5, 0x7D, 708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x5E, 0xA7, 0x7A, 0x27, 0x75, 0xD2, 0xEC, 0xFA, 718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x03, 0x2C, 0xFB, 0xDB, 0xF5, 0x2F, 0xB3, 0x78, 728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x61, 0x60, 0x27, 0x90, 0x04, 0xE5, 0x7A, 0xE6, 738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0xAF, 0x87, 0x4E, 0x73, 0x03, 0xCE, 0x53, 0x29, 748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x9C, 0xCC, 0x04, 0x1C, 0x7B, 0xC3, 0x08, 0xD8, 758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x2A, 0x56, 0x98, 0xF3, 0xA8, 0xD0, 0xC3, 0x82, 768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x71, 0xAE, 0x35, 0xF8, 0xE9, 0xDB, 0xFB, 0xB6, 778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x94, 0xB5, 0xC8, 0x03, 0xD8, 0x9F, 0x7A, 0xE4, 788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x35, 0xDE, 0x23, 0x6D, 0x52, 0x5F, 0x54, 0x75, 798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x9B, 0x65, 0xE3, 0x72, 0xFC, 0xD6, 0x8E, 0xF2, 808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0x0F, 0xA7, 0x11, 0x1F, 0x9E, 0x4A, 0xFF, 0x73 818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project}; 828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic const char *myname; 848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic void 868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectusage(void) 878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) fprintf(stderr, "Usage:\n\t%s [-i index] [clientname]\n", 898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project myname); 908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project exit(1); 918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint 948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectmain(int argc, char **argv) 958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project struct t_conf *tc; 978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project struct t_confent *tcent, mytce; 988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project struct t_pw pwval; 998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *name; 1008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char pname[256]; 1018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *pass1, *pass2; 1028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int flags, idx; 1038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *cp; 1048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char delimit; 1058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char strbuf[MAXB64PARAMLEN]; 1068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char saltbuf[MAXB64SALTLEN]; 1078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((myname = *argv) == NULL) 1098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project myname = "srp-entry"; 1108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project else 1118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project argv++; 1128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project idx = -1; 1148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (*argv != NULL && strcmp(*argv, "-i") == 0) { 1158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (*++argv == NULL) 1168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project usage(); 1178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project idx = atoi(*argv++); 1188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project tcent = NULL; 1218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (idx != 0 && (tc = t_openconf(NULL)) != NULL) { 1228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (idx == -1) 1238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project tcent = t_getconflast(tc); 1248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project else 1258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project tcent = t_getconfbyindex(tc, idx); 1268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (idx <= 0 && tcent == NULL) { 1288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project mytce.index = 0; 1298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project mytce.modulus.data = (u_char *)wkmodulus; 1308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project mytce.modulus.len = sizeof (wkmodulus); 1318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project mytce.generator.data = (u_char *)"\002"; 1328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project mytce.generator.len = 1; 1338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project tcent = &mytce; 1348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (tcent == NULL) { 1368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) fprintf(stderr, "SRP modulus/generator %d not found\n", 1378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project idx); 1388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project exit(1); 1398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((name = *argv) == NULL) { 1428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) printf("Client name: "); 1438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (fgets(pname, sizeof (pname), stdin) == NULL) 1448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project exit(1); 1458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((cp = strchr(pname, '\n')) != NULL) 1468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *cp = '\0'; 1478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project name = pname; 1488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for (;;) { 1518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((pass1 = getpassphrase("Pass phrase: ")) == NULL) 1528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project exit(1); 1538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project pass1 = strdup(pass1); 1548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((pass2 = getpassphrase("Re-enter phrase: ")) == NULL) 1558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project exit(1); 1568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (strcmp(pass1, pass2) == 0) 1578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project break; 1588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project free(pass1); 1598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) printf("Phrases don't match; try again.\n"); 1608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project memset(&pwval, 0, sizeof (pwval)); 1638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project t_makepwent(&pwval, name, pass1, NULL, tcent); 1648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project flags = 0; 1658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for (cp = name; *cp != '\0'; cp++) 1668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (isspace(*cp)) 1678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project flags |= HAS_SPACE; 1688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project else if (*cp == '"') 1698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project flags |= HAS_DQUOTE; 1708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project else if (*cp == '\'') 1718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project flags |= HAS_SQUOTE; 1728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project else if (*cp == '\\') 1738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project flags |= HAS_BACKSLASH; 1748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project delimit = flags == 0 ? '\0' : (flags & HAS_DQUOTE) ? '\'' : '"'; 1758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (delimit != '\0') 1768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) putchar(delimit); 1778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for (cp = name; *cp != '\0'; cp++) { 1788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (*cp == delimit || *cp == '\\') 1798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) putchar('\\'); 1808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) putchar(*cp); 1818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (delimit != '\0') 1838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) putchar(delimit); 1848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (void) printf(" * %d:%s:%s *\n", 1858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project pwval.pebuf.index, t_tob64(strbuf, 1868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project (char *)pwval.pebuf.password.data, pwval.pebuf.password.len), 1878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project t_tob64(saltbuf, (char *)pwval.pebuf.salt.data, 1888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project pwval.pebuf.salt.len)); 1898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return 0; 1908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 191