Path : /home/vishqocm/pcib.in/includes/
File Upload :
Current File : /home/vishqocm//pcib.in/includes/certificate_lib.php

<?php
/**
 * Certificate Generation and Security Library
 * 
 * This library provides functionality for secure certificate generation,
 * verification, and trusted signing.
 */

/**
 * Generate a secure certificate
 */
class CertificateGenerator {
    private $secretKey = 'popular_computer_institute_secure_cert_key';
    
    /**
     * Constructor
     */
    public function __construct() {
        // Try to get a secret key from the database
        $this->secretKey = $this->getSecretKey();
    }
    
    /**
     * Get a secret key for signing certificates
     * 
     * @return string Secret key
     */
    public function getSecretKey() {
        // Default key - secure enough for most use cases
        $defaultKey = 'popular_computer_institute_secure_cert_' . date('Ymd');
        
        // Try to get from database if available
        global $conn;
        if (isset($conn) && $conn) {
            try {
                $query = "SELECT setting_value FROM site_settings WHERE setting_key = 'certificate_secret_key'";
                $result = $conn->query($query);
                
                if ($result && $result->num_rows > 0) {
                    $row = $result->fetch_assoc();
                    return $row['setting_value'];
                }
            } catch (Exception $e) {
                // Just return the default key if there's an error
            }
        }
        
        return $defaultKey;
    }
    
    /**
     * Generate a unique verification code
     * 
     * @return string Verification code
     */
    public function generateVerificationCode() {
        return strtoupper(substr(md5(uniqid(rand(), true)), 0, 8));
    }
    
    /**
     * Sign certificate data 
     * 
     * @param array $data Certificate data to sign
     * @return array Signed certificate data
     */
    public function signCertificateData($data) {
        // Convert data to JSON
        $jsonData = json_encode($data);
        
        // Generate data hash
        $dataHash = md5($jsonData . $this->secretKey);
        
        // Return data with signature
        return [
            'data' => $data,
            'hash' => $dataHash,
            'issued_at' => date('Y-m-d H:i:s'),
            'valid_until' => date('Y-m-d H:i:s', strtotime('+10 years'))
        ];
    }
    
    /**
     * Verify a certificate's signature
     * 
     * @param array $signedData Signed certificate data
     * @return bool True if signature is valid
     */
    public function verifyCertificate($signedData) {
        // Extract data
        $data = $signedData['data'];
        $jsonData = json_encode($data);
        $expectedHash = md5($jsonData . $this->secretKey);
        
        // Verify hash
        return $expectedHash === $signedData['hash'];
    }
    
    /**
     * Generate a certificate with security features
     * 
     * @param array $certificateData Certificate data
     * @return array Complete secure certificate data
     */
    public function generateSecureCertificate($certificateData) {
        // Generate verification code if not provided
        if (!isset($certificateData['verification_code'])) {
            $certificateData['verification_code'] = $this->generateVerificationCode();
        }
        
        // Set issue date if not provided
        if (!isset($certificateData['issue_date'])) {
            $certificateData['issue_date'] = date('Y-m-d H:i:s');
        }
        
        // Sign certificate data
        $signedData = $this->signCertificateData($certificateData);
        
        return $signedData;
    }
}

/**
 * Certificate Verifier class
 */
class CertificateVerifier {
    public $generator;
    
    /**
     * Constructor
     */
    public function __construct() {
        $this->generator = new CertificateGenerator();
    }
    
    /**
     * Verify a certificate by verification code
     * 
     * @param string $verificationCode Verification code
     * @param array $signedData Signed certificate data
     * @return bool True if certificate is valid
     */
    public function verifyByCode($verificationCode, $signedData) {
        // Check verification code
        if ($signedData['data']['verification_code'] !== $verificationCode) {
            return false;
        }
        
        // Verify signature
        return $this->generator->verifyCertificate($signedData);
    }
    
    /**
     * Verify a certificate by certificate number
     * 
     * @param string $certificateNumber Certificate number
     * @param array $signedData Signed certificate data
     * @return bool True if certificate is valid
     */
    public function verifyByCertificateNumber($certificateNumber, $signedData) {
        // Check certificate number
        if ($signedData['data']['certificate_number'] !== $certificateNumber) {
            return false;
        }
        
        // Verify signature
        return $this->generator->verifyCertificate($signedData);
    }
}
?>