1/* 2 * Copyright (c) 2008 Kungliga Tekniska Högskolan 3 * (Royal Institute of Technology, Stockholm, Sweden). 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of KTH nor the names of its contributors may be 18 * used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY 22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE 25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 28 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#ifndef HEIM_SCRAM_H 35#define HEIM_SCRAM_H 36 37#include <sys/types.h> 38 39#ifndef __HEIM_BASE_DATA__ 40#define __HEIM_BASE_DATA__ 1 41struct heim_base_data { 42 size_t length; 43 void *data; 44}; 45#endif 46typedef struct heim_base_data heim_scram_data; 47 48typedef struct heim_scram heim_scram; 49 50typedef struct heim_scram_method_desc *heim_scram_method; 51 52extern struct heim_scram_method_desc heim_scram_digest_sha1_s; 53extern struct heim_scram_method_desc heim_scram_digest_sha256_s; 54 55#define HEIM_SCRAM_DIGEST_SHA1 (&heim_scram_digest_sha1_s) 56#define HEIM_SCRAM_DIGEST_SHA256 (&heim_scram_digest_sha256_s) 57 58struct heim_scram_server { 59#define SCRAM_SERVER_VERSION_1 1 60 int version; 61 int (*param)(void *ctx, 62 const heim_scram_data *user, 63 heim_scram_data *salt, 64 unsigned int *iteration, 65 heim_scram_data *servernonce); 66 int (*calculate)(void *ctx, 67 heim_scram_method method, 68 const heim_scram_data *user, 69 const heim_scram_data *c1, 70 const heim_scram_data *s1, 71 const heim_scram_data *c2noproof, 72 const heim_scram_data *proof, 73 heim_scram_data *server, 74 heim_scram_data *sessionKey); 75}; 76 77struct heim_scram_client { 78#define SCRAM_CLIENT_VERSION_1 1 79 int version; 80 int (*calculate)(void *ctx, 81 heim_scram_method method, 82 unsigned int iterations, 83 heim_scram_data *salt, 84 const heim_scram_data *c1, 85 const heim_scram_data *s1, 86 const heim_scram_data *c2noproof, 87 heim_scram_data *proof, 88 heim_scram_data *server, 89 heim_scram_data *sessionKey); 90}; 91 92extern struct heim_scram_client heim_scram_client_password_procs_s; 93#define HEIM_SCRAM_CLIENT_PASSWORD_PROCS (&heim_scram_client_password_procs_s) 94 95#include <heimscram-protos.h> 96 97#endif /* SCRAM_SCRAM_H */ 98