Skip to main content
Loading...

More Python Posts

from itertools import product
V='∀'
E='∃'


def tt(f,n) :
  xss=product((0,1),repeat=n)
  print('function:',f.__name__)
  for xs in xss : print(*xs,':',int(f(*xs)))
  print('')

# p \/ (q /\ r) = (p \/ q) /\ (p \/ r)

def prob1(p,q,r) :
  x=p or (q and r)
  y= (p or q) and (p or r)
  return x==y

tt(prob1,3)

# p/\(q\/r)=(p/\q)\/(p/\r)

def prob2(p,q,r) :
  x=p and ( q or r )
  y=(p and q) or (p and r)
  return x==y

tt(prob2,3)

#~(p/\q)=(~p\/~q)

def prob3(p,q) :
  x=not (p and q)
  y=(not p) or (not q)
  return x==y
tt(prob3,2)

#(~(p\/q))=((~p)/\~q)

def prob4(p, q):
   x = not(p or q)
   y = not p and not q
   return x == y

tt(prob4, 2)

#(p/\(p=>q)=>q)

def prob5(p,q):
  x= p and ( not p or q)
  return not x or q
    
tt(prob5,2)

# (p=>q)=((p\/q)=q)

def prob6(p,q) :
  x = (not p or q)
  y=((p or q) == q)
  return x==y
 
tt(prob6,2)


#((p=>q)=(p\/q))=q
def prob7(p,q):
  if ((not p or q)==(p or q))==q:
    return 1
 
tt(prob7,2)



#(p=>q)=((p/\q)=p)
def prob8(p,q):
  if (not p or q)==((p and q)==p):
    return 1
 
tt(prob8,2)


#((p=>q)=(p/\q))=p

def prob9(p,q):
  if ((not p or q)==(p and q))==p:
    return '1'

tt(prob9,2)



#(p=>q)/\(q=>r)=>(p=>r)
def prob10(p,q,r) :
  x = not ((not p or q) and (not q or r)) or (not p or r)
  return x
 
tt(prob10, 3)


# (p = q) /\ (q => r)  => (p => r)
#answer 1
def prob11(p,q,r) :
  x = not((p is q) and (not q or r)) or (not p or r)
  return x
 
tt(prob11, 3)

#(p=q)/\(q=>r)=>(p=>r)
#answer 2
def prob11(p,q,r):
  x=(p==q) and (not q or r)
  y=not p or r
  return not x or y

tt(prob11,3)

#((p=>q)/\(q=r))=>(p=>r)

def prob12(p,q,r):
  x=(not p or q) and ( q==r )
  y=not p or r
  return not x or y

tt(prob12,3)

#(p=>q)=>((p/\r)=>(q/\r))

def prob13(p,q,r):
  x=not p or q
  y=(not(p and r) or ( q and r))
  return not x or y

tt(prob13,3)

#Question#2----------------------------------------

#(p=>q)=>r=p=>(q=>r)

def prob14(p,q,r):
  x=(not(not p or q) or r)
  y=(not p or (not q or r))
  return x==y

tt(prob14,3) 


def prob15(p, q):
    x = not(p and q)
    y = not p and not q
    return x == y

tt(prob15, 2)


def prob16(p, q):
    x = not(p or q)
    y = not p or not q
    return x == y

tt(prob16, 2)



def prob17(p):
    x = p
    y = not p
    return x == y

tt(prob17, 1)
import re

def _map_ikev2_vendor_capabilities(message_type, input_string):
    # List of acceptable message types
    valid_message_types = ['IKE_SA_INIT', 'IKE_AUTH']
    
    # Validate message type
    if message_type not in valid_message_types:
        raise ValueError(f"Invalid message type: {message_type}. Must be one of {valid_message_types}")
    
    # Mapping dictionary for IKE values with RFC references
    value_map = {
        # IKE_SA_INIT capabilities
        'FRAG_SUP': 'IKE Fragmentation',  # RFC 7383, Section 3
        'REDIR_SUP': 'Redirection',  # RFC 5685, Section 3
        'HASH_ALG': 'Hash Algorithms',  # RFC 7296, Section 3.3.2
        'NATD_S_IP': 'NAT-T (Source IP)',  # RFC 7296, Section 2.23
        'NATD_D_IP': 'NAT-T (Destination IP)',  # RFC 7296, Section 2.23
        'SIGN_HASH_ALGS': 'Signature Hash Algorithms',  # RFC 7296, Section 2.15
        'NON_FIRST_FRAGMENTS': 'Non-First IKE Fragments',  # RFC 7383, Section 3
        'CHILDLESS_IKEV2_SUP': 'Childless IKEv2',  # RFC 6023, Section 3
        'INTERMEDIATE': 'Intermediate Exchange',  # RFC 9242, Section 3
        'COOKIE': 'Cookie-Based DoS Protection',  # RFC 7296, Section 2.6
        # IKE_AUTH capabilities
        'ESP_TFC_PAD_N': 'ESPv3 TFC Padding Not Supported',  # RFC 7296, Section 3.3.1
        'MOBIKE_SUP': 'MOBIKE',  # RFC 4555, Section 3
        'MULT_AUTH': 'Multiple Auth',  # RFC 4739, Section 3
        'EAP_ONLY': 'EAP-Only Auth',  # RFC 5998, Section 3
        'MSG_ID_SYN_SUP': 'Message ID Sync',  # RFC 6311, Section 3
        'IPCOMP_SUPPORTED': 'IP Payload Compression Support',  # RFC 7296, Section 3.3.2
        'ADD_4_ADDR': 'Additional IPv4 Addresses',  # RFC 4555, Section 3.2
        'ADD_6_ADDR': 'Additional IPv6 Addresses',  # RFC 4555, Section 3.2
        'INIT_CONTACT': 'Initial Contact',  # RFC 7296, Section 3.16
        'HTTP_CERT_LOOKUP_SUP': 'HTTP Certificate Lookup',  # RFC 7296, Section 3.7
        'REKEY_SA': 'SA Rekeying'  # RFC 7296, Section 3.16
    }
    
    # Notifications valid for each message type
    ike_sa_init_valid = {
        'FRAG_SUP', 'REDIR_SUP', 'HASH_ALG', 'NATD_S_IP', 'NATD_D_IP',
        'SIGN_HASH_ALGS', 'NON_FIRST_FRAGMENTS', 'CHILDLESS_IKEV2_SUP',
        'INTERMEDIATE', 'COOKIE'
    }
    ike_auth_valid = {
        'ESP_TFC_PAD_N', 'MOBIKE_SUP', 'MULT_AUTH', 'EAP_ONLY', 'MSG_ID_SYN_SUP',
        'IPCOMP_SUPPORTED', 'ADD_4_ADDR', 'ADD_6_ADDR', 'INIT_CONTACT',
        'HTTP_CERT_LOOKUP_SUP', 'REKEY_SA'
    }
    
    # Select valid notifications based on message type
    valid_notifications = ike_sa_init_valid if message_type == 'IKE_SA_INIT' else ike_auth_valid
    
    # Regex to capture N(...) patterns
    pattern = r'N\([^)]+\)'
    matches = re.findall(pattern, input_string)
    
    # Parse matches and create result list
    result = []
    for match in matches:
        key = match[2:-1]  # Extract content inside N(...)
        if key in valid_notifications and key in value_map:
            result.append(value_map[key])
        else:
            # Log unrecognized notifications for debugging
            print(f"Warning: Unrecognized or invalid notification for {message_type}: {key}")
    
    return ', '.join(result) if result else 'None'

# Example usage
ike_sa_init_string = '2025-07-18 20:16:22.839 15[ENC] <4> parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) N(SIGN_HASH_ALGS) N(NON_FIRST_FRAGMENTS) N(CHILDLESS_IKEV2_SUP) N(INTERMEDIATE) N(COOKIE) ]'
ike_auth_string = '2025-07-18 20:16:22.898 07[ENC] <4> parsed IKE_AUTH request 1 [ IDi N(INIT_CONTACT) IDr AUTH N(ESP_TFC_PAD_N) SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) N(IPCOMP_SUPPORTED) N(ADD_6_ADDR) N(HTTP_CERT_LOOKUP_SUP) N(REKEY_SA) ]'

# Test with IKE_SA_INIT
print("IKE_SA_INIT Results:")
print(_map_ikev2_vendor_capabilities("IKE_SA_INIT", ike_sa_init_string))

# Test with IKE_AUTH
print("\nIKE_AUTH Results:")
print(_map_ikev2_vendor_capabilities("IKE_AUTH", ike_auth_string))
def format_timestamp(timestamp_epoch):
    """
    Convert epoch timestamp to formatted datetime string without using datetime package.
    
    Args:
        timestamp_epoch (int/float): Unix epoch timestamp (seconds since 1970-01-01 00:00:00 UTC)
        
    Returns:
        str: Formatted datetime string in 'YYYY-MM-DD HH:MM:SS' format
    """
    # Constants for time calculations
    SECONDS_PER_DAY = 86400
    SECONDS_PER_HOUR = 3600
    SECONDS_PER_MINUTE = 60
    
    # Handle negative timestamps and convert to integer
    timestamp = int(timestamp_epoch)
    
    # Calculate days since epoch and remaining seconds
    days_since_epoch = timestamp // SECONDS_PER_DAY
    remaining_seconds = timestamp % SECONDS_PER_DAY
    
    # Calculate hours, minutes, seconds
    hours = remaining_seconds // SECONDS_PER_HOUR
    remaining_seconds %= SECONDS_PER_HOUR
    minutes = remaining_seconds // SECONDS_PER_MINUTE
    seconds = remaining_seconds % SECONDS_PER_MINUTE
    
    # Calculate date (simplified, ignoring leap seconds)
    year = 1970
    days = days_since_epoch
    while days >= 365:
        is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
        days_in_year = 366 if is_leap else 365
        if days >= days_in_year:
            days -= days_in_year
            year += 1
    
    # Month lengths (non-leap year for simplicity, adjusted later for leap years)
    month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        month_lengths[1] = 29
    
    month = 0
    while days >= month_lengths[month]:
        days -= month_lengths[month]
        month += 1
    
    # Convert to 1-based indexing for month and day
    month += 1
    day = days + 1
    
    # Format the output string
    return f"{year:04d}-{month:02d}-{day:02d} {hours:02d}:{minutes:02d}:{seconds:02d}"

# Example timestamp (Unix epoch seconds)
timestamp = 1697054700
formatted_date = format_timestamp(timestamp)
print(formatted_date + " UTC")  # Output: 2023-10-11 18:45:00